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

程序员有二十年 2024-10-31 10:58:53

前言

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

项目介绍

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

创建控制台应用

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

安装NuGet命令安装PM> Install-Package FodyPM> Install-Package MethodTimer.FodyNuGet包管理器安装

搜索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 = ; MethodTimeLogger.Log(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/, typeof(Program).TypeHandle), stopwatch.Elapsed, message); } }耗时拦截器记录两种方法

运行耗时为long(毫秒):

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

运行耗时为TimeSpan:

/// <summary> /// 运行耗时为TimeSpan /// </summary> public static MethodTimeLogger { public static void Log(MethodBase methodBase, TimeSpan elapsed, string message) { Console.WriteLine($"方法:{methodBase.Name} 耗时:{elapsed.TotalMilliseconds} 毫秒,信息:{message}"); } }耗时统计时长输出项目源码地址

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

开源地址:https://github.com/Fody/MethodTimerMethodTimerExercise: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.mdGitee开源地址:https://gitee.com/ysgdaydayup/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.md

免费开源的程序员简历模板了解作者&获取更多学习资料程序员常用的开发工具软件推荐加入DotNetGuide技术社区交流群

C#/.NET/.NET Core推荐学习书籍

C#/.NET/.NET Core学习视频汇总

.NET/.NET Core ORM框架资源汇总C#/.NET/.NET Core开发者学习路线集

C#/.NET/.NET Core面试宝典(基础版)

C#/.NET/.NET Core优秀项目和框架推荐

C#/.NET/.NET Core学习、工作、面试指南

学习是一个永无止境的过程,你知道的越多,你不知道的也会越多,在有限的时间内坚持每天多学一点,你一定能成为你想要成为的那个人。不积跬步无以至千里,不积小流无以成江海!
0 阅读:0

程序员有二十年

简介:感谢大家的关注