文章目錄
使用 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 上方加入
Timeattribute可以視需求來決定是否要紀錄參數或是其他訊息
無參數的 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 台灣 授權條款 釋出。
