一个.NET开源、轻量级的运行耗时统计库 - MethodTimer
【摘要】 前言在.NET开发中,为了准确统计对应方法的执行时间,我们最常用的方式是手动使用 Stopwatch 来显式编写计时逻辑,但是假如你需要大量的使用 Stopwatch 来进行耗时统计的话不利于保持代码的整洁和增加代码的维护成本。项目介绍MethodTimer是一个.NET开源、免费(MIT License)、轻量级的运行耗时统计库,用于在编译时自动向指定方法注入计时代码,无需手动编写繁琐的计...
前言
在.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支持💖。
-
开源地址: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
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)