我如何计算垃圾收集期间的时间?

时间:2015-04-20 10:38:30

标签: c# .net performance garbage-collection measurement

我想在

这样的方法中计算垃圾收集的时间
//code
testfunction()
//code

//display the time spend by garbage collection when we was in the testfunction 
Display(GarbageCollectionTime(testfunction))

我看了看 https://msdn.microsoft.com/en-us/library/x2tyfybc(v=vs.110).aspx https://msdn.microsoft.com/en-us/library/ee851764(v=vs.110).aspx

https://msdn.microsoft.com/en-us/library/system.diagnostics.performancecounter.nextvalue(v=vs.110).aspx

但我无法理解如何做到这一点。

请有人知道如何做到这一点。

2 个答案:

答案 0 :(得分:2)

您可以尝试JetBrains dotTracedotMemory。 dotTrace在调用树中的方法下显示特殊节点[Garbage Collection]。 dotMemory可以向您展示您可能想要了解的关于记忆的一切信息。

答案 1 :(得分:2)

  

从函数测量的时间中减去它以获得没有gc次的函数时间

您想在没有GC影响的情况下进行基准测试。将GC置于低延迟模式。这将推迟最昂贵的GC周期,直到您解除批次延迟模式。

GCSettings.LatencyMode = GCLatencyMode.LowLatency;

还有较新的SustainedLowLatency。我不知道它做了什么但它可能更具攻击性。阅读文档。

现在这不是一个完全有效的基准,因为如果你的函数分配GC时间类型是该函数的一部分。最好多次测量功能并包括许多GC循环,以便摊销的GC时间是基准测试的一部分。