会员登录 - 用户注册 - 设为首页 - 加入收藏 - 网站地图 使用 .NET Core 中的 EventCounters 衡量性能!

使用 .NET Core 中的 EventCounters 衡量性能

时间:2025-11-05 04:34:55 来源:益强数据堂 作者:人工智能 阅读:896次

背景

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

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

代码实现

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

using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using System.Diagnostics.Tracing; namespace WebApplication42 {     [EventSource(Name = "Sample.EventCounter.Minimal")]     public sealed class MinimalEventCounterSource : EventSource     {         public static readonly MinimalEventCounterSource Log = new MinimalEventCounterSource();         private EventCounter _requestCounter;         private MinimalEventCounterSource() =>             _requestCounter = new EventCounter("request-time", this)             {                 DisplayName = "Request Processing Time",                 DisplayUnits = "ms"             };         public void Request(string url, float elapsedMilliseconds)         {             Console.WriteLine("url:" + url + "  elapsedMilliseconds:" + elapsedMilliseconds);             WriteEvent(1, url, elapsedMilliseconds);             _requestCounter?.WriteMetric(elapsedMilliseconds);         }         protected override void Dispose(bool disposing)         {             _requestCounter?.Dispose();             _requestCounter = null;             base.Dispose(disposing);         }     } } 

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

using Microsoft.AspNetCore.Http.Extensions; using Microsoft.AspNetCore.Mvc.Filters; using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Threading.Tasks; namespace WebApplication42 {     public class LogRequestTimeFilterAttribute : ActionFilterAttribute     {         private readonly Stopwatch _stopwatch = new Stopwatch();         public override void OnActionExecuting(ActionExecutingContext context) => _stopwatch.Start();         public override void OnActionExecuted(ActionExecutedContext context)         {             _stopwatch.Stop();             MinimalEventCounterSource.Log.Request(                 context.HttpContext.Request.GetDisplayUrl(), _stopwatch.ElapsedMilliseconds);         }     } } 

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

// This method gets called by the runtime. Use this method to add services to the container.         public void ConfigureServices(IServiceCollection services)         {             services.AddControllers(options => options.Filters.Add<LogRequestTimeFilterAttribute>());             services.AddSwaggerGen(c =>             {                 c.SwaggerDoc("v1", new OpenApiInfo { Title = "WebApplication42", Version = "v1" });             });         } 

url:https://localhost:5008/WeatherForecast elapsedMilliseconds:70 url:https://localhost:5008/WeatherForecast elapsedMilliseconds:19 url:https://localhost:5008/WeatherForecast elapsedMilliseconds:18 url:https://localhost:5008/WeatherForecast elapsedMilliseconds:19 url:https://localhost:5008/WeatherForecast elapsedMilliseconds:22 url:https://localhost:5008/WeatherForecast elapsedMilliseconds:17 url:https://localhost:5008/WeatherForecast elapsedMilliseconds:17 

(责任编辑:IT科技)

最新内容
推荐内容
  • 手机插U盘使用教程(快速实现手机和U盘的数据传输,让移动存储更便捷)
  • 搜狗拼音Linux版发布后,Fcitx PPA便移除了搜狗拼音,对于想继续使用Fcitx的用户而言,可以安装谷歌拼音来实现中文输入。假如你使用的是Ubuntu Gnome,在安装谷歌拼音前还需要删除Ibus,打开终端输入下面的命令移除Ibus,接着添加Fcitx PPA,复制代码代码如下:复制代码代码如下:sudo apt-get updatesudo apt-get install fcitx-googlepinyin
  • 电脑磁盘驱动写入错误的原因及解决方法(探究电脑磁盘驱动写入错误的根源,以及应对之道)
  • 1、安装wpa_supplicant  apt-get install wpasupplicant  2、创建/etc/wpa_supplicant.conf包含以下内容:  network={  ssid=你的无线网ssid  psk=你的wpa口令  key_mgmt=WPA-PSK  proto=WPA  pairwise=TKIP  }  3、编辑/etc/network/interfaces  iface eth1 inet dhcp  pre-up wpa_supplicant -Bw -Dwext -ieth1 -c/etc/wpa_supplicant.conf  post-down killall -q wpa_supplicant  注:eth1是你的网卡,并且假设你使用dhcp协议。  4、启动你的网卡  ifup eth1  假如有必要请关闭你的有线网络(ifdown eth0),防止路由问题。
  • 电脑进入PE出现错误的解决办法(排查PE进入错误的具体步骤和解决方案)
  • Ubuntu终端里面显示路径名称太长怎么修改?Ubuntu默认的终端下面,进入很多层的目录后,前面那个提示符会显示完整的路径,这样命令行太长,让人觉得不舒服,现在教大家一个方法修改一下使命令行只显示当前目录的最后一级目录名,这样看起来也好,用pwd可以看到完整的路径名。1、找到配置文件先进行备份:cp  ~/.bashrc  ~/.bashrc-bak,找到配置文件修改:vi  ~/.bashrc,备份是为了防止配置修改出错,可以还原; 2、下面是我的/home/vagrant/.bashrc,真正修改到就一行代码,找到: 62     PS1=${debian_chroot:+($debian_chroot)}u@h:W$ ,修改将小写w改为大写W保存,执行source /home/vagrant/.bashrc或者重启终端就行了。既可以显示最后一级,又可以查看当前完整路径。注意事项:一定要找对修改的位置。
热点内容