当前位置: 首页 > news >正文

一个.NET开源、轻量级的运行耗时统计库

前言

在.NET开发中,为了准确统计对应方法的执行时间,我们最常用的方式是手动使用 Stopwatch 来显式编写计时逻辑,但是假如你需要大量的使用 Stopwatch 来进行耗时统计的话不利于保持代码的整洁和增加代码的维护成本。

项目介绍

MethodTimer是一个.NET开源、免费(MIT License)、轻量级的运行耗时统计库,用于在编译时自动向指定方法注入计时代码,无需手动编写繁琐的计时逻辑。

创建控制台应用

创建名为:MethodTimerExercise的控制台应用。

图片

图片

安装NuGet

命令安装

PM> Install-Package Fody
PM> Install-Package MethodTimer.Fody

NuGet包管理器安装

搜索Fody安装:

图片

搜索MethodTimer.Fody安装:

图片

快速使用

通过在方法上添加 Time 属性,MethodTimer 会在编译时自动向 TimeMethod 注入计时代码。

        [Time]public static void TimeMethod(){for (int i = 0; i < 100; i++){Console.WriteLine($"输出结果{i}");}}

使用ILSpy查看编译后的代码

 public static void TimeMethod(){Stopwatch stopwatch = Stopwatch.StartNew();try{for (int i = 0; i < 100; i++){Console.WriteLine($"输出结果{i}");}}finally{stopwatch.Stop();string message = null;MethodTimeLogger.Log(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/, typeof(Program).TypeHandle), stopwatch.Elapsed, message);}}

图片

耗时拦截器记录两种方法

运行耗时为long(毫秒):

        /// <summary>/// 运行耗时为long(毫秒)/// </summary>public static class MethodTimeLogger1{public static void Log(MethodBase methodBase, long milliseconds, string message){Console.WriteLine($"方法:{methodBase.Name} 耗时:{milliseconds} 毫秒,信息:{message}");}}

运行耗时为TimeSpan:

        /// <summary>/// 运行耗时为TimeSpan/// </summary>public static class MethodTimeLogger{public static void Log(MethodBase methodBase, TimeSpan elapsed, string message){Console.WriteLine($"方法:{methodBase.Name} 耗时:{elapsed.TotalMilliseconds} 毫秒,信息:{message}");}}

耗时统计时长输出

图片

项目源码地址

更多项目实用功能和特性欢迎前往项目开源地址查看👀,别忘了给项目一个Star支持💖。

  • 开源地址:https://github.com/Fody/MethodTimer

  • MethodTimerExercise:https://github.com/YSGStudyHards/DotNetExercises/tree/master/MethodTimerExercise

优秀项目和框架精选

该项目已收录到C#/.NET/.NET Core优秀项目和框架精选中,关注优秀项目和框架精选能让你及时了解C#、.NET和.NET Core领域的最新动态和最佳实践,提高开发工作效率和质量。坑已挖,欢迎大家踊跃提交PR推荐或自荐(让优秀的项目和框架不被埋没🤞)。

  • GitHub开源地址:https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.md

  • Gitee开源地址:https://gitee.com/ysgdaydayup/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.md

http://www.dtcms.com/a/334723.html

相关文章:

  • 解决 Windows 下运行 MCP 脚本弹出 WSH 错误窗口的问题 | Windows Script Host
  • vscode配置cpp运行和调试环境(保姆级)
  • 一文入门Gin框架
  • 【运维心得】三步10分钟拆装笔记本键盘
  • 【自用】JavaSE--特殊文件Properties与XML、日志技术
  • 《零基础掌握飞算Java AI:核心概念与案例解析》
  • Swift 实战:实现一个简化版的 Twitter(LeetCode 355)
  • Cohere 开发企业级大型语言模型(LLM)
  • Vue实例中的其他属性【5】
  • 安全审计-iptales防火墙设置
  • Java硬件融合实战:Vector API+ROCm加速大模型推理优化解锁AMD GPU异构算力,实现LLM本地化部署
  • Mysql常见的优化方法
  • OpenShift 4.19安装中的变化
  • 失落城堡2 送修改器(Lost Castle 2)免安装中文版
  • 安卓11 12系统修改定制化_____修改系统默认域名解析规则 实现屏蔽广告 屏蔽应用更新等功能
  • JavaScript手录17-原型
  • Java后台生成多个Excel并用Zip打包下载
  • 《AI 与数据质量的深度碰撞:颠覆传统治理模式的变革》文章提纲
  • 【C++语法】手写堆与有关堆的容器/函数
  • CMake进阶: 配置文件(configure_file)
  • 数据结构初阶(17)排序算法——非比较排序(计数排序·动图演示)、排序算法总结
  • 打卡day40
  • 在本地部署Qwen大语言模型全过程总结
  • Go语言panic机制详解
  • goland在windows上编译突然变慢
  • Spring Framework:Java 开发的基石与 Spring 生态的起点
  • [go] 桥接模式
  • Git代码库安装与管理常用操作
  • 同创物流学习记录1
  • 论文学习24:Boundary-Sensitive Segmentation of SmallLiver Lesions