Dot-Net
Visual Studio 探查器,如何追踪clr._dllClr.dllclr.dll用法
當在 Visual Studio 中使用分析器來跟踪昂貴的函式時,我有時會看到大部分工作最終都在
$$ clr.dll $$. 這基本上相當於一個黑匣子,我想知道是否有辦法追查為什麼它在那里花了這麼多時間。 我假設 clr.dll 處理諸如 JIT 編譯、載入程序集和管理 appdomains、垃圾收集、反射等之類的事情。但是實際上很難判斷是什麼程式碼導致它花費了這麼多時間。
很明顯,除了執行時本身之外,還有其他一些程式碼導致它在 clr.dll 中花費了這麼多時間,那麼您如何追踪哪些程式碼有問題呢?
你需要知道你的程式碼的哪一部分——你可以編輯和編譯的程式碼,這是你唯一可以修復的程式碼——那部分程式碼佔了相當大比例的時間使用。
知道clr.dll使用了很多時間是沒有用的,除非您能分辨出程式碼的哪一部分負責它。
該資訊在呼叫堆棧中。
如果你有一個方法,甚至是一行程式碼,它在堆棧上存在一定百分比的時間,例如 20%,那麼它負責大約那個百分比的時間。如果你能以某種方式消除那行程式碼(或讓它花費更少的時間),那麼總時間的 20% 將變為*零,或者幾乎為零,*給你一個 1.0/0.8 = 1.25 或 25% 的加速因子
那麼如何找到這樣的線條呢? 這是我使用的方法。 沒有人聲稱它很漂亮,除非總的結果得到讚賞。如果重複應用,可能會有很大的加速因子。