我試圖測量我的應用程序中兩點之間在GC
之間花了多少時間。就像這樣:測量「在GC中花費的時間百分比」
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
gcPerfCounter.NextValue();
// This is the part that I would like to measure
doStuff();
var timeSpentInGC = gcPerfCounter.NextValue();
但是,我不確定這是使用此計數器的正確方法。在這篇文章中:Correct use of "% Time in GC" performance counter答案表示它應該像秒錶一樣使用,這就是爲什麼我在操作之前調用NextValue()。我不認爲這是這種情況,因爲它給了我相同的結果,當我刪除第一個gcPerfCounter.NextValue()
行。
MSDN文章說,有關性能計數器「在GC%時間」:
顯示已度過了自上次垃圾回收週期執行垃圾收集 的時間的百分比。 https://msdn.microsoft.com/en-us/library/w8f5kw2e(v=vs.110).aspx
它混淆了我,因爲我認爲自從上次GC cycle
我們GC
花費零時間。所以根據這個描述,這個值應該總是爲零。
你能向我解釋一下這個性能計數器的含義和正確使用情況嗎?
這樣你不會得到任何有意義的結果,它只會在上一個GC循環中返回「GC Time%」。無法保證在運行'doStuff'時你會得到0,1個或更多的集合,並且不能保證這個集合會隨着時間的推移而重複。 – Groo