您的位置:首頁(yè) > 軟件教程 > 教程 > MethodTimer:一個(gè)輕量級(jí)的.NET運(yùn)行耗時(shí)統(tǒng)計(jì)庫(kù)

MethodTimer:一個(gè)輕量級(jí)的.NET運(yùn)行耗時(shí)統(tǒng)計(jì)庫(kù)

來(lái)源:好特整理 | 時(shí)間:2024-11-06 10:04:45 | 閱讀:70 |  標(biāo)簽: T Net ETH 一個(gè) TIM 開(kāi)源   | 分享到:

前言 在.NET開(kāi)發(fā)中,為了準(zhǔn)確統(tǒng)計(jì)對(duì)應(yīng)方法的執(zhí)行時(shí)間,我們最常用的方式是手動(dòng)使用 Stopwatch 來(lái)顯式編寫(xiě)計(jì)時(shí)邏輯,但是假如你需要大量的使用 Stopwatch 來(lái)進(jìn)行耗時(shí)統(tǒng)計(jì)的話不利于保持代碼的整潔和增加代碼的維護(hù)成本。 項(xiàng)目介紹 MethodTimer是一個(gè).NET開(kāi)源、免費(fèi)(MIT L

在.NET開(kāi)發(fā)中,為了準(zhǔn)確統(tǒng)計(jì)對(duì)應(yīng)方法的執(zhí)行時(shí)間,我們最常用的方式是手動(dòng)使用 Stopwatch 來(lái)顯式編寫(xiě)計(jì)時(shí)邏輯,但是假如你需要大量的使用 Stopwatch 來(lái)進(jìn)行耗時(shí)統(tǒng)計(jì)的話不利于保持代碼的整潔和增加代碼的維護(hù)成本。

MethodTimer是一個(gè).NET開(kāi)源、免費(fèi)(MIT License)、輕量級(jí)的運(yùn)行耗時(shí)統(tǒng)計(jì)庫(kù),用于在編譯時(shí)自動(dòng)向指定方法注入計(jì)時(shí)代碼,無(wú)需手動(dòng)編寫(xiě)繁瑣的計(jì)時(shí)邏輯。

創(chuàng)建名為: MethodTimerExercise 的控制臺(tái)應(yīng)用。

MethodTimer:一個(gè)輕量級(jí)的.NET運(yùn)行耗時(shí)統(tǒng)計(jì)庫(kù)

MethodTimer:一個(gè)輕量級(jí)的.NET運(yùn)行耗時(shí)統(tǒng)計(jì)庫(kù)

安裝NuGet

命令安裝

PM>?Install-Package?Fody
PM>?Install-Package?MethodTimer.Fody

搜索 Fody 安裝:

MethodTimer:一個(gè)輕量級(jí)的.NET運(yùn)行耗時(shí)統(tǒng)計(jì)庫(kù)

搜索 MethodTimer.Fody 安裝:

MethodTimer:一個(gè)輕量級(jí)的.NET運(yùn)行耗時(shí)統(tǒng)計(jì)庫(kù)

通過(guò)在方法上添加 Time 屬性,MethodTimer 會(huì)在編譯時(shí)自動(dòng)向 TimeMethod 注入計(jì)時(shí)代碼。

????????[Time]
????????public?static?void?TimeMethod()
????????{
????????????for?(int?i?=?0;?i?????????????{
????????????????Console.WriteLine($"輸出結(jié)果{i}");
????????????}
????????}

使用ILSpy查看編譯后的代碼

?public?static?void?TimeMethod()
?{
??Stopwatch?stopwatch?=?Stopwatch.StartNew();
??try
??{
???for?(int?i?=?0;?i????{
????Console.WriteLine($"輸出結(jié)果{i}");
???}
??}
??finally
??{
???stopwatch.Stop();
???string?message?=?null;
???MethodTimeLogger.Log(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode?not?supported:?LdMemberToken*/,?typeof(Program).TypeHandle),?stopwatch.Elapsed,?message);
??}
?}

MethodTimer:一個(gè)輕量級(jí)的.NET運(yùn)行耗時(shí)統(tǒng)計(jì)庫(kù)

耗時(shí)攔截器記錄兩種方法

運(yùn)行耗時(shí)為long(毫秒):

????????///?
????????///?運(yùn)行耗時(shí)為long(毫秒)
????????///?

????????public?static?class?MethodTimeLogger1
????????{
????????????public?static?void?Log(MethodBase?methodBase,?long?milliseconds,?string?message)
????????????{
????????????????Console.WriteLine($"方法:{methodBase.Name}?耗時(shí):{milliseconds}?毫秒,信息:{message}");
????????????}
????????}

運(yùn)行耗時(shí)為T(mén)imeSpan:

????????///?
????????///?運(yùn)行耗時(shí)為T(mén)imeSpan
????????///?

????????public?static?class?MethodTimeLogger
????????{
????????????public?static?void?Log(MethodBase?methodBase,?TimeSpan?elapsed,?string?message)
????????????{
????????????????Console.WriteLine($"方法:{methodBase.Name}?耗時(shí):{elapsed.TotalMilliseconds}?毫秒,信息:{message}");
????????????}
????????}

耗時(shí)統(tǒng)計(jì)時(shí)長(zhǎng)輸出

MethodTimer:一個(gè)輕量級(jí)的.NET運(yùn)行耗時(shí)統(tǒng)計(jì)庫(kù)

項(xiàng)目源碼地址

更多項(xiàng)目實(shí)用功能和特性歡迎前往項(xiàng)目開(kāi)源地址查看?,別忘了給項(xiàng)目一個(gè)Star支持?。

優(yōu)秀項(xiàng)目和框架精選

該項(xiàng)目已收錄到C#/.NET/.NET Core優(yōu)秀項(xiàng)目和框架精選中,關(guān)注優(yōu)秀項(xiàng)目和框架精選能讓你及時(shí)了解C#、.NET和.NET Core領(lǐng)域的最新動(dòng)態(tài)和最佳實(shí)踐,提高開(kāi)發(fā)工作效率和質(zhì)量?右淹,歡迎大家踴躍提交PR推薦或自薦(讓優(yōu)秀的項(xiàng)目和框架不被埋沒(méi)?)。

小編推薦閱讀

好特網(wǎng)發(fā)布此文僅為傳遞信息,不代表好特網(wǎng)認(rèn)同期限觀點(diǎn)或證實(shí)其描述。

相關(guān)視頻攻略

更多

掃二維碼進(jìn)入好特網(wǎng)手機(jī)版本!

掃二維碼進(jìn)入好特網(wǎng)微信公眾號(hào)!

本站所有軟件,都由網(wǎng)友上傳,如有侵犯你的版權(quán),請(qǐng)發(fā)郵件[email protected]

湘ICP備2022002427號(hào)-10 湘公網(wǎng)安備:43070202000427號(hào)© 2013~2025 haote.com 好特網(wǎng)