C#测试开源运行耗时库MethodTimer.Fody

  微信公众号“dotNET跨平台”的文章《一个监控C#方法运行耗时开源库》介绍了支持测量方法耗时的包MethodTimer.Fody,使用方便,还可以自定义输出信息格式。本文学习并测试MethodTimer.Fody包的使用方式。
  新建控制台程序,通过Nuget包管理器添加MethodTimer.Fody和Fody(参考文献1和3中都提到需要安装这两个包,但是测试时仅安装MethodTimer.Fody也可以正常运行,暂不清楚怎么回事)。

在这里插入图片描述
  MethodTimer.Fody库支持两种耗时时间形式:1)时段,TimeSpan类型;2)总耗毫秒数,long类型。
  采用MethodTimer.Fody库计算方法耗时时,在需计算耗时的方法上赋予Time属性,同时定义拦截器(intercepter)获取方法耗时信息,既可以将信息输出到控制台,也可以按需输出到文件或其它地方。
  以开源博客项目Blog中的雪花生成算法类为例,计算SnowflakeId.NextStringId()函数的耗时,其设置形式为:

[Time("生成雪花ID测试")]
public static string NextStringId()

  同时定义拦截器截获并输出耗时信息,可以输出时段,也可按总毫秒数输出:

public static class MethodTimeLogger
{//按时段输出public static void Log(MethodBase methodBase, TimeSpan elapsed, string message){Console.WriteLine($"方法:{methodBase.Name} 耗时(时段):{elapsed}, 信息:{message}");}//按总毫秒数输出public static void Log(MethodBase methodBase, long milliseconds, string message){Console.WriteLine($"方法:{methodBase.Name} 耗时(总毫秒数):{milliseconds}, 信息:{message}");}
}

在这里插入图片描述

  从上面的耗时来看,Blog项目中的雪花算法运行速度很快,但距离其极限速度还差距较大(项目的注释中介绍SnowFlake单机每秒都能够产生出极限4,096,000个ID)。Time特性中添加的文本会一并输出到控制台中
  根据MethodTimer.Fody库的GitHub主页说明,给方法添加Time特性,编译时会将函数主体置于System.Diagnostics.Stopwatch的StartNew和Stop函数之间,以计算函数耗时,如果没有定义拦截器,模式将耗时信息调用Trace.WriteLine输出,定义拦截器后,则调用拦截器的函数输出耗时信息(测试时没有定义拦截器的话,程序编译会报错)。
  Time特性除了用于函数,也可以用于构造函数、类、模块或程序集,将Time定义在SnowflakeId类上,则调用NextStringId函数时会输出所有调用过的函数的耗时。

 [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Module | AttributeTargets.Class | AttributeTargets.Constructor | AttributeTargets.Method)]public class TimeAttribute : Attribute

在这里插入图片描述

参考文献:
[1]https://blog.csdn.net/sD7O95O/article/details/134622718
[2]https://github.com/Fody/Fody
[3]https://github.com/Fody/MethodTimer

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

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

相关文章

Linux命令--根据端口号查看进程号(PID)

Linux命令–根据端口号查看进程号(PID) 查找8080端口对应的进程号: netstat -nlp|grep :8297对应的进程号1061,如果想杀掉此进程,可以用一下命令: kill -9 1061

STM32CubeIDE(CUBE-MX hal库)----定时器

系列文章目录 STM32CubeIDE(CUBE-MX hal库)----初尝点亮小灯 STM32CubeIDE(CUBE-MX hal库)----按键控制 STM32CubeIDE(CUBE-MX hal库)----串口通信 文章目录 系列文章目录前言一、定时器二、使用步骤三、HAL库实验代码三、标准库代码 前言 STM32定时器是一种多功能外设&#…

Java数据结构之《链式线性表的插入与删除》问题

一、前言: 这是怀化学院的:Java数据结构中的一道难度中等偏下的一道编程题(此方法为博主自己研究,问题基本解决,若有bug欢迎下方评论提出意见,我会第一时间改进代码,谢谢!) 后面其他编程题只要我…

【Linux】基础IO--文件基础知识/文件操作/文件描述符

文章目录 一、文件相关基础知识二、文件操作1.C语言文件操作2.操作系统文件操作2.1 比特位传递选项2.2 文件相关系统调用2.3 文件操作接口的使用 三、文件描述符fd1.什么是文件描述符2.文件描述符的分配规则 一、文件相关基础知识 我们对文件有如下的认识: 1.文件 …

Youtube如何做SEO关键词挖掘

做好Youtube的SEO优化,可以使我们的视频得到更多的展示,更多的点击和观看,就能获得更多的粉丝和流量。一方面通过视频做引流到目标网站进行转化赚钱,另一方面可以通过涨粉接youtube广告赚钱。要做seo最关键的一步在于关键词的挖掘…

什么是网络可视化?网络可视化工具有用吗

网络可视化定义是自我描述的,因为它在单个屏幕上重新创建网络布局,以图形和图表的形式显示有关网络设备、网络指标和数据流的信息,为 IT 运营团队提供一目了然的理解和决策。 网络是复杂的实体,倾向于持续进化,随着业…

pycharm编译报错处理

1.c生成工具下载 https://visualstudio.microsoft.com/visual-cpp-build-tools/ 在这里插入图片描述 pip install pycocotools

【驱动】SPI驱动分析(四)-关键API解析

关键API 设备树 设备树解析 我们以Firefly 的SPI demo 分析下dts中对spi的描述&#xff1a; /* Firefly SPI demo */ &spi1 {spi_demo: spi-demo00{status "okay";compatible "firefly,rk3399-spi";reg <0x00>;spi-max-frequency <48…

Provisioning Profile的重要性

大家好&#xff0c;我是咕噜-凯撒。在iOS和macOS开发中&#xff0c;Provisioning Profile&#xff08;配置文件&#xff09;是一个至关重要的组成部分&#xff0c;它包含开发者证书、App ID和设备信息的文件&#xff0c;不仅用于验证应用程序的身份和权限&#xff0c;还包括了很…

软件测试面试经历和上岸后工作分享

哈喽、因为最近很多小伙伴私信问我的比较多&#xff0c;今天就专门说下&#xff0c;之前为甚转行和怎么选机构就不和大家细说了&#xff0c;之前的文章和视频也都有提到过。 今天主要是和大家说下自己转行后的感受和面试时候的一些经历&#xff0c;希望能给正在转行&#xff0c…

PCB布线为什么不能走直角或锐角-笔记

PCB布线为什么不能走直角或锐角-笔记 摘要一.PCB走线在直角转弯的地方&#xff0c;信号前后部分相互影响这几个理由我们来一一分析一下传输线的直角带来的寄生电容从阻抗的角度来看直角的尖角产生放电或者电磁辐射走线直角的工艺问题 摘要 有一定熟悉画过PCB板的人或者PCB教学…

模拟算法【2】

文章目录 &#x1f958;6. N 字形变换&#x1f372;题目&#x1fad5;算法原理&#x1f963;代码实现 &#x1f957;38. 外观数列&#x1f37f;题目&#x1f9c2;算法原理&#x1f9c8;代码实现 &#x1f958;6. N 字形变换 &#x1f372;题目 题目链接&#xff1a;6. N 字形变…