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

前言

在.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支持💖。

优秀项目和框架精选

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

相关推荐
追逐时光者14 小时前
推荐几款开源且免费的 .NET MAUI 组件库
【.net】·【c#】·【开源项目】·【.net core】·【maui】
追逐时光者3 天前
精选4款基于.NET开源、功能强大的通讯调试工具
【.net】·【c#】·【开源项目】·【.net core】
追逐时光者5 天前
C#/.NET/.NET Core技术前沿周刊 | 第 26 期(2025年2.10-2.16)
【.net】·【c#】·【开源项目】·【.net core】·【技术前沿周刊】
追逐时光者7 天前
V-Control:一个基于 .NET MAUI 的开箱即用的UI组件库
【.net】·【c#】·【开源项目】·【maui】
追逐时光者8 天前
8款支持 C# 语言的 AI 辅助编程神器,高效编程利器!
【.net】·【c#】·【ai编程】·【aigc&ai赋能】
追逐时光者9 天前
C#字符串拼接的6种方式及其性能分析对比
【.net】·【c#】·【.net core】·【面试指南】·【拾遗补漏】
追逐时光者10 天前
C#/.NET/.NET Core技术前沿周刊 | 第 24 期(2025年1.27-1.31)
【.net】·【c#】·【开源项目】·【.net core】·【技术前沿周刊】
追逐时光者10 天前
C#/.NET/.NET Core技术前沿周刊 | 第 25 期(2025年2.1-2.9)
【.net】·【c#】·【.net core】·【技术前沿周刊】
追逐时光者12 天前
C#/.NET/.NET Core优秀项目和框架2025年1月简报
【.net】·【c#】·【开源项目】·【.net core】·【每月简报】
追逐时光者12 天前
推荐一款人人可用的开源 BI 工具,更符合国人使用习惯的数据可视化分析工具,数据大屏开发神器!
【开源项目】·【实用工具】