在.NET應用程序中很容易顯示GC中的當前%,但是如何顯示GC中的平均時間或GC中的事件總時間,以便您可以查看完整的方案並測量你真的改善了事情?GC中的平均時間
在GC%的時間被定義爲:
「在GC%時 顯示的是花了自上次垃圾回收週期執行垃圾收集時間的百分比此計數器通常指示所做的工作垃圾收集器代表應用程序收集和壓縮內存,該計數器僅在每次垃圾收集結束時更新,該計數器不是一個平均值,其值反映了最後一次觀察值。
在.NET應用程序中很容易顯示GC中的當前%,但是如何顯示GC中的平均時間或GC中的事件總時間,以便您可以查看完整的方案並測量你真的改善了事情?GC中的平均時間
在GC%的時間被定義爲:
「在GC%時 顯示的是花了自上次垃圾回收週期執行垃圾收集時間的百分比此計數器通常指示所做的工作垃圾收集器代表應用程序收集和壓縮內存,該計數器僅在每次垃圾收集結束時更新,該計數器不是一個平均值,其值反映了最後一次觀察值。
如果您有興趣測量在GC中花費的時間,可以通過ETW獲取該數據。 PerfMonitor將爲您收集並顯示該數據 - 請查看此MSDN Magazine文章以獲取簡介:http://msdn.microsoft.com/en-us/magazine/gg490356.aspx。
GC是非確定性的。因此很難優化,因爲根據應用程序運行的時間長短以及每代的大小,你會得到不同的結果。
更簡單的方法 - 說實話更加可靠 - 就是計算您在特定方法中創建的對象的數量。諸如不在循環中創建對象等最佳實踐將有所幫助。
某些版本的Visual Studio具有內置的分析器。還有第三方分析器,免費和花錢的。 Profiler可以顯示您在GC中花費的時間百分比。
編輯大約有任何舊線花,包括GC線程的CPU時間一些常見的誤解。例如,可以針對GC線程使用的同步對象進行鎖定。在這種情況下,GC將處於待命狀態,但不會產生可測量的CPU時間。如果沒有適當的工具,這些情況很難檢查。
同意,唯一明智的選擇是減少「垃圾」收集。 – 2012-03-23 16:34:23