1

尝试对同一个 .net 3.5 应用程序的 2 个版本进行前后比较,结果不一致,具体取决于我使用的工具。

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。

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

谁是对的,我怎么知道?

4

1 回答 1

1

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

  • v1创建了垃圾并保留了对它的引用(-> 内存泄漏),所以没有什么需要清理的
  • 但是v2创建了垃圾并释放了引用。

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

这为我解释了。

于 2012-08-08T12:11:45.913 回答