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

背景

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

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

代码实现

下面是有关如何实现 System.Diagnostics.Tracing.EventSource 的示例。 创建名为 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 方法。

   // 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/306233.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql100链接同时处理_php 连接MYSQL 两个同时连接为什么只有一个连接成功,必须删掉一个,另外一个才查询生效出结果,下附代码...

include("config.php");header("Content-Type:text/html;charsetgbk_2312");$connmysql_connect($config_ip,$config_name,$config_pass)ordie("链接错误");mysql_select_db($config...include("config.php");header("Content-Ty…

python 3.9特性_Python 3.9来了!这十个新特性值得关注

选自towardsdatascience作者&#xff1a;Farhad Malik机器之心编译编辑&#xff1a;陈萍近日&#xff0c;Python 3.9 发布&#xff0c;并开发了一些新特性&#xff0c;包括字典合并与更新、新的解析器、新的字符串函数等。Python 3.9 已于 10 月 5 日发布&#xff0c;新版本的特…

基于 C# 的 ETL 大数据并行编程

作者&#xff1a;James Spinella译者&#xff1a;精致码农原文&#xff1a;https://bit.ly/3nGQu4J并行编程在历史上一直是软件开发中比较小众和复杂的环节&#xff0c;往往不值得头疼。但编写并行化应用只会越来越简单&#xff0c;一个应用同时利用设备 CPU 上的多个内核&…

python购物车典例_Python入门:购物车实例

product_list[(iphone,5800),(pro,120000),(python book,120),(Bike,800),(coffe,39)] #定义商品列表shopping_list[] #定义购物车salaryinput("your sally:") #输入薪水if salary.isdigit(): #判断是否为数字salaryint(salary)while True:for index,item in enumera…

一个小技巧助您减少if语句的状态判断

在进行项目的开发的过程中&#xff0c; if 语句是少不了的&#xff0c;但我们始终要有一颗消灭 if / else 语句的心。为了消灭if / else 我们引入了 短路器 的概念。短路器 有时候的确能精简我们的代码&#xff0c;但还不够&#xff0c;因此我参考了一个方法来继续消灭一部分 断…

抢先看:笔者亲历的2020年中国.NET开发者大会活动纪实

编者&#xff1a;2020年中国.NET开发者大会第一天活动已经结束&#xff0c;可以通过https://codechina.csdn.net/lives 会看。第二天的Workshop 也有直播哦。12020年12月19日的苏州工业园区&#xff0c;天公作美&#xff0c;阳光明媚&#xff0c;气象迷人&#xff0c;正是一个搞…

python魔术方法由谁定义_Python的魔术方法

魔术方法就是在定义的类中定义一些”不一般”的方法&#xff0c;使类的使用更方便、完善、健壮&#xff0c;是python特有的方法&#xff0c;一般都是前后包含两个下划线__的方法称为魔术方法&#xff0c;例如__new__。基本魔术方法有哪些__new__&#xff1a;是在一个对象实例化…

Swagger在header中添加token

概述平常做项目使用mvcwebapi&#xff0c;采取前后端分离的方式&#xff0c;后台提供API接口给前端开发人员。这个过程中遇到一个问题后台开发人员怎么提供接口说明文档给前端开发人员。为了解决这个问题&#xff0c;项目中引用swagger&#xff08;我比较喜欢戏称为“丝袜哥”&…

mysql中有没有单行函数_MySQL之函数(单行函数、分组函数)

##进阶函数/*调用语法&#xff1a;select函数名(实参列表)&#xff1b;分组函数和单行函数的区别&#xff1a;单行函数&#xff1a;将一个数据进行处理&#xff0c;返回一个值分组函数&#xff1a;将虚拟表看做一个组&#xff0c;处理一组数据&#xff0c;返回一个值常见的分组…

如何在 C# 中使用 数据注解

数据注解 是一种可以应用到 类 或者 类成员上用来指定类之间关系的一种 Attribute&#xff0c;它的应用场景比较多&#xff0c;可用来描述 UI 上如何进行数据展示&#xff0c;还可以用来做类属性的规则验证&#xff0c;这篇文章就来讨论为什么 注解 值得你去学习&#xff0c;以…

mysql判断是否在日期区间_通过sql判断时间区间是否存在数据

在做项目的时候遇到过一个问题&#xff0c;用户需要获取当前月或者几个月的数据&#xff0c;但是有一个要求&#xff0c;如果已经存在一张单已经包含了这几个月的数据&#xff0c;那么就不能再提取到重复的数据。其实这个问题&#xff0c;我做完了我的方式之后才发现&#xff0…

2020年中国.NET开发者大会第二天 WorkShop

工作坊1&#xff1a;使用 NCF 从 0 到 1 快速模块化开发/部署业务系统实战工作坊简介&#xff1a;本次工作坊由盛派开发团队亲自带领开发者使用 NCF&#xff08;NeuCharFramework&#xff09; 框架进行系统快速开发&#xff0c;进行现场实操训练&#xff0c;大家可以通过本次活…

mysql直接生成excel_MYSQL 将excel里面的数据直接生成sql语句

如何使用EXCEL生成SQL语句&#xff1f;将光标放到新的列上里面&#xff0c;然后在公式栏里面输入如下公式&#xff1a;"insert into t values("&A1&","&B1&","&C1&","&D1&")"效果图&#x…

OrchardCore实现模块化核心原理分析

【导读】ABP vNext并未过多探究&#xff0c;当然其基于DDD理念分层清晰&#xff0c;灵活性、扩展性自然也不在话下&#xff0c;但有些情况下我可能会首选OrchardCore&#xff0c;并非ABP vNext不可若改造项目&#xff0c;也因历史遗留问题&#xff0c;数据库表设计也可能存在不…

sqoop将hive导出到mysql_Sqoop hive导出到mysql[转]

通过Sqoop将Hive表数据导入到MySQL通常有两种情况。第一种是将hive上某张表的全部数据导入到mysql对应的表中。第二种是将hive上某张表中的部分数据导入到mysql对应的表中。两种方式的区别在于第二种情况需要指定要导入数据的列名称。两种情况的导入方式分别如下&#xff1a;1.…

.NET 云原生架构师训练营(模块二 基础巩固 配置)--学习笔记

2.2.3 核心模块--配置IConfigurationOptionsASP.NET Core 中的配置&#xff1a;https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/configuration/?viewaspnetcore-5.0IConfigurationIConfiguration 的使用层级对象配置到 key-value 键值对转换通过环境变量修改日志…

java分桃子_猴子分桃子.java

问题描述&#xff1a;猴子分桃&#xff1a;海 滩上有一堆桃子&#xff0c;五只猴子来分。第一只猴子把这堆桃子凭据分为五份&#xff0c;多了一个&#xff0c;这只猴子把多的一个扔入海中&#xff0c;拿走了一份。第二只猴子把剩下的桃子又平均分成五份&#xff0c;又多了一个&…

.NET Conf 2020 - 基于ASP.NET Core构建可热插拔的插件化系统

文章标题&#xff1a;.NET Conf 2020 - 基于ASP.NET Core构建可热插拔的插件化系统作者&#xff1a;Lamond Lu项目地址&#xff1a;https://github.com/lamondlu/CoolCat博客&#xff1a;http://www.cnblogs.com/lwqlun以下是2020.12.19日的演讲文稿和视频&#xff1a;大家好&a…

java获取机器号_(转)JAVA获得机器码的实现

http://yangshangchuan.iteye.com/blog/2012401首先&#xff0c;定义了一个统一的接口&#xff0c;以支持不同操作系统不同实现的透明切换&#xff1a;Java代码 收藏代码/***生成机器码的接口&#xff0c;不同平台有不同实现* author 杨尚川*/public interface SequenceServic…

多款主流编程语言,哪款开发软件最安全?

喜欢就关注我们吧&#xff01;在当下的市场环境中&#xff0c;除了掌握困扰软件的最常见安全问题外&#xff0c;开发人员还应该了解到底是什么问题在影响他们正在使用的编程语言。静态代码分析安全公司 Veracode 最近发布了一份年度软件安全状态&#xff08;SOSS&#xff09;报…