【问题标题】:How i can calculate the time spend during garbage collection?我如何计算垃圾收集期间花费的时间?
【发布时间】:2015-04-20 10:38:29
【问题描述】:

我想计算一个方法中垃圾收集所花费的时间,比如

//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

但我不明白该怎么做。

请有人知道如何做。

【问题讨论】:

  • JVM 分析器可能有这个能力。我在我的 c++ 项目中使用了 VerySleepy,它显示了在对象的析构函数中花费的时间。 Java 可能存在类似的东西,不需要任何额外的代码即可工作。老实说,如果它随 JDK 一起提供,我不会感到惊讶。
  • @Carcigenicate 它是关于 c# .net 而不是 java 我希望如果有人可以帮助我
  • 这不是一个有意义的测量。 testfunction() 运行时 GC 收集的几率是完全随机的。您只能衡量长时间内 GC 收集时间与程序执行时间的比例。
  • 没人知道你要解决什么问题,我们只能说,不管是什么问题,你都做错了。如果您不告诉我们,您将无法获得好的建议。

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


【解决方案1】:

您可以尝试JetBrains dotTracedotMemory。 dotTrace 在调用树中的方法下显示特殊节点 [Garbage Collection]。 dotMemory 可以向您展示您可能想了解的有关内存的所有信息以及更多信息。

【讨论】:

    【解决方案2】:

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

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

    GCSettings.LatencyMode = GCLatencyMode.LowLatency;
    

    还有较新的SustainedLowLatency。我不知道它有什么作用,但它可能更具侵略性。阅读文档。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-28
      • 2012-06-26
      • 1970-01-01
      • 2019-05-23
      • 1970-01-01
      相关资源
      最近更新 更多