2012-03-23 127 views
1

在.NET應用程序中很容易顯示GC中的當前%,但是如何顯示GC中的平均時間或GC中的事件總時間,以便您可以查看完整的方案並測量你真的改善了事情?GC中的平均時間

在GC

%的時間被定義爲:

「在GC%時 顯示的是花了自上次垃圾回收週期執行垃圾收集時間的百分比此計數器通常指示所做的工作垃圾收集器代表應用程序收集和壓縮內存,該計數器僅在每次垃圾收集結束時更新,該計數器不是一個平均值,其值反映了最後一次觀察值。

回答

2

GC是非確定性的。因此很難優化,因爲根據應用程序運行的時間長短以及每代的大小,你會得到不同的結果。

更簡單的方法 - 說實話更加可靠 - 就是計算您在特定方法中創建的對象的數量。諸如不在循環中創建對象等最佳實踐將有所幫助。

+1

同意,唯一明智的選擇是減少「垃圾」收集。 – 2012-03-23 16:34:23

1

某些版本的Visual Studio具有內置的分析器。還有第三方分析器,免費和花錢的。 Profiler可以顯示您在GC中花費的時間百分比。

編輯大約有任何舊線花,包括GC線程的CPU時間一些常見的誤解。例如,可以針對GC線程使用的同步對象進行鎖定。在這種情況下,GC將處於待命狀態,但不會產生可測量的CPU時間。如果沒有適當的工具,這些情況很難檢查。

+0

其實我需要總時間。 Process Explorer在GC中顯示%時間,而不是總時間:( – pablo 2012-03-23 16:55:53

+0

@pablo請看看我的編輯。您可能會注意到VS Profiler比直接使用Windows API更令人愉快。 – GregC 2012-03-23 18:22:31