首页 > 其他分享 >一个.NET开源、轻量级的运行耗时统计库 - MethodTimer

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

时间:2024-10-31 12:15:54浏览次数:6  
标签:耗时 MethodTimer 开源 static NET public 轻量级

前言

在.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}");
            }
        }

耗时统计时长输出

项目源码地址

更多项目实用功能和特性欢迎前往项目开源地址查看

标签:耗时,MethodTimer,开源,static,NET,public,轻量级
From: https://blog.csdn.net/qq_37237487/article/details/143377396

相关文章

  • 一个整合性、功能丰富的.NET网络通信框架
    前言最近有不少同学问:.NET网络通信框架有什么好推荐的吗?今天大姚给大家分享一款基于ApacheLicense开源的一个整合性、功能丰富的.NET(包括C#、VB.Net、F#)网络通信框架:TouchSocket。特色功能一键解决TCP黏分包问题,提供协议模板,支持快速实现固定包头、固定长度、区间字符......
  • 管中窥豹----.NET Core到.NET 8 托管堆的变迁
    https://www.cnblogs.com/lmy5215006/p/18515971 在研究.NETString底层结构时,我所观察到的情况与《.NETCore底层入门》,《.NET内存管理宝典》书中描述不符。故多研究了一下。发现.NET托管堆的结构也是越来越多,越来越高性能。 //示例代码internalclassProgram{......
  • BitNet.cpp:革新性的1比特LLM推理框架,让CPU也能驾驭百亿参数大模型!
    ......
  • 会员权益上新: OneThingAI 算力云给园子会员送算力
    和厂商合作给会员送福利,是我们拓展会员权益的一个方向。最近我们和算力云服务商OneThingAI达成了合作,OneThingAI给园子的会员提供了不少代金券,让大家免费体验一下OneThingAI的算力服务。OneThingAI是一家提供AI场景解决方案的算力云服务商,提供了适合AI推理的强大且经济高......
  • 推荐一个 ASP.NET Core 的轻量级插件框架
    前言本文将介绍一个专为ASP.NETCore设计的轻量级插件框架——PluginCore,该框架不仅能够简化插件的开发与集成,还能大幅提高开发效率。另外,还将简要介绍相关的前端技术和SDK支持,帮助我们快速上手。项目介绍PluginCore是一个轻量级插件框架,通过最小化的配置简化插件的集成与管理......
  • 实现.NET 4.0下的Task类相似功能组件
    实现.NET4.0下的Task类相似功能:TaskExCum组件详解引言随着.NET技术的发展,异步编程模型逐渐成为现代应用程序开发中的标准实践之一。.NET4.5引入了Task类,极大地简化了异步编程的过程。然而,许多遗留系统仍在使用.NET4.0或更低版本,这些版本并未直接支持Task类的全......
  • 什么是Internet 和 Internet的性能指标
    Internet和它的性能指标请时刻注意,Internet也是网络,它是一些相互连接的节点的集合。互联网(Internet)从宏观上看,它是一个由软件与硬件的集合组成的分布式系统。这个系统主要为用户提供的服务就是通信。互联网的组成硬件:一些物理链路(用于连接)和用于通信的硬件节点(路由器......
  • 计算机网络(们)和 Internet (计算机网络的子类)
    计算机网络101计算机网络,属于网络的一种。网络通常指由多个节点和它们之间的连接关系构成的结构,强调连接、交互和通信。说明网络的主要目的是通信(交流)(通信)历史以前使用广播,不管是物理的还是无线电广播。特点:强调的是信息的单向传递。用户只能接收信息,而不能实时反馈。(这......
  • Apache Commons Net 共享SSLSession问题解决
        某些服务器会默认开启TLS会话恢复,如FileZillaServer1.0及以后的版本(相对于1.0以前版本就是先当与勾选了RequireTLSsessionresumptionondataconnectwhenusingPORTP)。ApacheCommonsNet目前是不支持TLS会话恢复的,所以我们只能通过重写FTPSClient来实现。不然你......
  • dotnet core微服务框架Jimu ~ 会员授权微服务
    提供授权服务,用户使用会员的用户名和密码获取token,带着token访问受保护的接口,如浏览和发布新闻。有2个公开的api:token:获取token;GetCurrentMemberInfo:获取当前token的会员信息;有1个不公开的方法:GetMemberInfo:根据会员用户名和密码,获取会员信息,该方法供......