前言
在.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