小编kb0*_*b00的帖子

测量“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();
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

5
推荐指数
1
解决办法
4082
查看次数