我试图测量GC我的应用程序中两点之间花费了多少时间。像这样的东西:
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
gcPerfCounter.NextValue();
// This is the part that I would like to measure
doStuff();
var timeSpentInGC = gcPerfCounter.NextValue();
Run Code Online (Sandbox Code Playgroud)
但是,我不确定这是使用该计数器的正确方法。在这篇文章:正确使用“% Time in GC”性能计数器中,答案说它应该像秒表一样使用,这就是我在操作之前调用 NextValue() 的原因。我不认为是这种情况,因为当我删除第一gcPerfCounter.NextValue()行时,它给了我相同的结果。
MSDN 文章介绍了“% Time in GC”性能计数器:
显示自上次垃圾收集周期以来执行垃圾收集所花费的时间百分比。 https://msdn.microsoft.com/en-us/library/w8f5kw2e(v=vs.110).aspx
这让我很困惑,因为我认为自从上次以来GC cycle我们在 . 中花费的时间为零GC。所以根据这个描述,这个值应该始终为零。
您能解释一下这个性能计数器在我的例子中的含义和正确使用吗?
.net c# garbage-collection performancecounter memory-profiling