写点什么

.NET 使用 MethodTimer 进行运行耗时统计提升代码的整洁性与可维护性!

作者:追逐时光者
  • 2025-10-04
    广东
  • 本文字数:1673 字

    阅读完需:约 5 分钟

前言

在 .NET 开发中,我们经常需要对关键方法进行耗时监控,以识别性能瓶颈。虽然 Stopwatch 是实现这一目标的常见选择,但其使用方式高度侵入:必须手动添加开始、结束和日志记录代码。当这类计时逻辑遍布项目各处时,不仅造成大量重复代码,还让业务逻辑变得混乱不堪,极大影响了代码的整洁性与可维护性。

项目介绍

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

创建控制台应用

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


安装 NuGet

命令安装

PM> Install-Package FodyPM> 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

发布于: 刚刚阅读数: 4
用户头像

不积跬步无以至千里,不积小流无以成江海! 2020-01-14 加入

微软MVP、华为云HCDE、华为云云享专家、51CTO专家博主、阿里云专家博主、博客园推荐博客、CSDN博客专家、腾讯云创作之星、掘金优秀创作者,一个热爱开源的全栈软件工程师,擅长C#、.NET、Vue等相关技术开发。

评论

发布
暂无评论
.NET 使用 MethodTimer 进行运行耗时统计提升代码的整洁性与可维护性!_C#_追逐时光者_InfoQ写作社区