当前位置:首页 > 通信资讯 > 正文

什么是.net core(.net与.net core)

什么是.net core(.net与.net core)

背景

对于每隔几毫秒发生的事件,最好使每个事件的开销较低(小于一毫秒)。 否则,对性能的影响将很大。 记录事件意味着你将向磁盘写入内容。 如果磁盘不够快,你将丢失事件。 你需要一个解决方案,而不是记录事件本身。

在处理大量事件时,了解每个事件的度量值也无济于事。 大多数时候,你只需要一些统计信息。 因此,你可以在进程本身中获取统计信息,然后偶尔编写一个事件来报告统计信息,这是 EventCounter 将执行的操作。

代码实现

下面是有关如何实现 System.Diagnostics.Tracing.EventSource 的示例。 创建名为 MinimalEventCounterSource.cs 的新文件

  1. usingSystem;
  2. usingSystem.Collections.Generic;
  3. usingSystem.Linq;
  4. usingSystem.Threading.Tasks;
  5. usingSystem.Diagnostics.Tracing;
  6. namespaceWebApplication42
  7. {
  8. [EventSource(Name="Sample.EventCounter.Minimal")]
  9. publicsealedclassMinimalEventCounterSource:EventSource
  10. {
  11. publicstaticreadonlyMinimalEventCounterSourceLog=newMinimalEventCounterSource();
  12. privateEventCounter_requestCounter;
  13. privateMinimalEventCounterSource()=>
  14. _requestCounter=newEventCounter("request-time",this)
  15. {
  16. DisplayName="RequestProcessingTime",
  17. DisplayUnits="ms"
  18. };
  19. publicvoidRequest(stringurl,floatelapsedMilliseconds)
  20. {
  21. Console.WriteLine("url:"+url+"elapsedMilliseconds:"+elapsedMilliseconds);
  22. WriteEvent(1,url,elapsedMilliseconds);
  23. _requestCounter?.WriteMetric(elapsedMilliseconds);
  24. }
  25. protectedoverridevoidDispose(booldisposing)
  26. {
  27. _requestCounter?.Dispose();
  28. _requestCounter=null;
  29. base.Dispose(disposing);
  30. }
  31. }
  32. }

添加操作筛选器,创建名为 LogRequestTimeFilterAttribute.cs 的新文件,并使用以下代码:

  1. usingMicrosoft.AspNetCore.Http.Extensions;
  2. usingMicrosoft.AspNetCore.Mvc.Filters;
  3. usingSystem;
  4. usingSystem.Collections.Generic;
  5. usingSystem.Diagnostics;
  6. usingSystem.Linq;
  7. usingSystem.Threading.Tasks;
  8. namespaceWebApplication42
  9. {
  10. publicclassLogRequestTimeFilterAttribute:ActionFilterAttribute
  11. {
  12. privatereadonlyStopwatch_stopwatch=newStopwatch();
  13. publicoverridevoidOnActionExecuting(ActionExecutingContextcontext)=>_stopwatch.Start();
  14. publicoverridevoidOnActionExecuted(ActionExecutedContextcontext)
  15. {
  16. _stopwatch.Stop();
  17. MinimalEventCounterSource.Log.Request(
  18. context.HttpContext.Request.GetDisplayUrl(),_stopwatch.ElapsedMilliseconds);
  19. }
  20. }
  21. }

操作筛选器在请求开始时启动 Stopwatch,并在其完成后停止,捕获运行时间。 总毫秒数记录到 MinimalEventCounterSource 单一实例。 为了应用此筛选器,需要将其添加到筛选器集合。 在 Startup.cs 文件中,更新包含此筛选器的 ConfigureServices 方法。

  1. //Thismethodgetscalledbytheruntime.Usethismethodtoaddservicestothecontainer.
  2. publicvoidConfigureServices(IServiceCollectionservices)
  3. {
  4. services.AddControllers(options=>options.Filters.Add<LogRequestTimeFilterAttribute>());
  5. services.AddSwaggerGen(c=>
  6. {
  7. c.SwaggerDoc("v1",newOpenApiInfo{Title="WebApplication42",Version="v1"});
  8. });
  9. }

什么是.net core(.net与.net core)

什么是.net core(.net与.net core)

  1. url:https://localhost:5008/WeatherForecastelapsedMilliseconds:70
  2. url:https://localhost:5008/WeatherForecastelapsedMilliseconds:19
  3. url:https://localhost:5008/WeatherForecastelapsedMilliseconds:18
  4. url:https://localhost:5008/WeatherForecastelapsedMilliseconds:19
  5. url:https://localhost:5008/WeatherForecastelapsedMilliseconds:22
  6. url:https://localhost:5008/WeatherForecastelapsedMilliseconds:17
  7. url:https://localhost:5008/WeatherForecastelapsedMilliseconds:17

原文链接:https://mp.weixin.qq.com/s/rRYKxa1iHLKCKwTH2SK4Mg

如果您对该产品感兴趣,请填写办理(客服微信:xiaoxiongyidong)

为您推荐:

发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。