前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一个.NET开源、轻量级的运行耗时统计库 - MethodTimer

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

原创
作者头像
追逐时光者
发布2024-10-31 13:07:32
710
发布2024-10-31 13:07:32
举报
文章被收录于专栏:开源项目编程进阶实战

前言

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

项目介绍

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

创建控制台应用

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

图片
图片
图片
图片

安装NuGet

命令安装

代码语言:javascript
复制
PM> Install-Package Fody
PM> Install-Package MethodTimer.Fody

NuGet包管理器安装

搜索Fody安装:

图片
图片

搜索MethodTimer.Fody安装:

图片
图片

快速使用

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

代码语言:javascript
复制
        [Time]
        public static void TimeMethod()
        {
            for (int i = 0; i < 100; i++)
            {
                Console.WriteLine($"输出结果{i}");
            }
        }

使用ILSpy查看编译后的代码

代码语言:javascript
复制
 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(毫秒):

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

运行耗时为TimeSpan:

代码语言:javascript
复制
        /// <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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 项目介绍
  • 创建控制台应用
  • 安装NuGet
    • 命令安装
      • NuGet包管理器安装
      • 快速使用
        • 使用ILSpy查看编译后的代码
          • 耗时拦截器记录两种方法
            • 耗时统计时长输出
            • 项目源码地址
            • 优秀项目和框架精选
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档