什么是typeperf报告与其他所有工具(mem profiler,进程资源管理器,完全转储)之间的差异

时间:2012-08-03 01:44:13

标签: .net memory-profiling memory-dump process-explorer

尝试在同一个.net 3.5应用程序的两个版本之前/之后进行比较,我会得到不一致的结果,具体取决于我使用的工具。

typeperf - 我认为它具有权威性 - 说:

  • v1:244MB / 260MB(专用字节/工作集)
  • v2:281MB / 296MB

Process Explorer 会在效果图中显示这些数字:

  • v1:283MB(私有字节)
  • v2:262MB

因此,typeperf说v2需要更多的内存,Process Explorer声称相反。

这些都是单独的测量和不同的测量,但这些数字可以非常可靠地重现。

除了前面提到的2个工具之外,我还从Process Explorer中获取了完整内存转储,并且仅查看文件大小(没有时间使用WinDbg或以其他方式分析它们) :

  • v1:484MB(完整转储文件大小)
  • v2:480MB

此外,从 .net Memory Profiler 运行应用程序时,v2中的本机内存,.net内存和总内存都低于v1。

所以它似乎是对世界其他地方的打字(WinDbg分析仍然很出色)。

谁是对的,我怎么知道?

1 个答案:

答案 0 :(得分:1)

我很清楚问题是什么:在我的测试中,我没有给GC足够的时间来完成它的工作

  • v1 创建了垃圾并保留了对它的引用( - >内存泄漏),因此无需清理
  • 但是 v2 创建了垃圾并发布了引用。

当进行完全转储或使用内存分析器时,GC将运行(在后一种情况下,我知道它是事实,在前者我猜,基于私有字节倾销时显着下降)

这对我解释了。