文章目錄
使用 MethodTimer.Fody 來為 method 加上時間測量
之前筆記 Stopwatch 的正確用法 紀錄到如何使用 Stopwatch 的新 API,讓我想起過去常使用的 GitHub:MethodTimer.Fody 也是透過 Stopwatch.StartNew()
方式來計算時間,回頭確認是否有更新時,才想起沒有為 MethodTimer.Fody
寫過筆記,畢竟它的用法簡單,不需要太多的說明。剛好因為 Stopwatch 新 API 的關係想連帶紀錄一下其他東西,就趁這個機會就來紀錄一下 MethodTimer.Fody
的使用方式。
基本環境說明
- macOS Sequoia 15.1.1 (Apple M2 Pro)
- JetBrains Rider 2024.3
- dotnet SDK 9.0.100
NuGet package
- MethodTimer.Fody 3.2.2
使用方式
安裝 NuGet package
dotnet add package MethodTimer.Fody
加入
FodyWeavers.xml
檔案 (NuGet 安裝後會自動產生)新增 Interceptor (攔截器)
比照套件原生方式使用 trace 來記錄執行時間
如果沒有自訂 Interceptor,預設會使用
Trace.WriteLine
來紀錄內容,以 ASP.NET Core 為例,可以新增一個 ConsoleTraceListener 做為 TraceListener 的顯示方式
將 ASP.NET 用的 logger 設定為 MethodTimer.Fody
在想要測量執行時間 method 上方加入
Time
attribute可以視需求來決定是否要紀錄參數或是其他訊息
無參數的 method
有參數的 method
修改 log level 至
Trace
以顯示我們在 Interceptor 中設定的 log實際效果
無參數
有參數
心得
GitHub:MethodTimer.Fody 提供了非常簡單的方式:在 method 上加上 Time
attribute 來計算 method 的執行時間,另外可以自訂 Interceptor 來客製記錄的內容與方式,非常方便
不過 MethodTimer.Fody 是基於 Fody 的套件,Fody 是一個編譯後工具(Post-Compiler Tool)。它修改的是已生成的 IL,也就是在 .NET 程式集已經生成後進行操作,看不到插入的程式碼,如果有 debug 的需求,難度較高
回到 Stopwatch 新 API 的議題,我看 MethodTimer.Fody 已經將修改 commit 至 struct-stopwatch branch,但一直沒有 merge 至 master branch,所以目前還是使用 Stopwatch.StartNew()
的方式來計算時間。
參考資料
文章作者 Yowko Tsai
上次更新 2024-11-27
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。