Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net typeperf报告的内容与其他所有工具(mem profiler、process explorer、完全转储)之间的差异_.net_Memory Profiling_Memory Dump_Process Explorer - Fatal编程技术网

.net typeperf报告的内容与其他所有工具(mem profiler、process explorer、完全转储)之间的差异

.net typeperf报告的内容与其他所有工具(mem profiler、process explorer、完全转储)之间的差异,.net,memory-profiling,memory-dump,process-explorer,.net,Memory Profiling,Memory Dump,Process Explorer,尝试对同一个.NET3.5应用程序的两个版本进行前后比较时,我会得到不一致的结果,这取决于我使用的工具 typeperf——我认为这是权威性的——说: v1:244MB/260MB(专用字节/工作集) v2:281MB/296MB Process Explorer在性能图中显示以下数字: v1:283MB(专用字节) v2:262MB 所以typeperf说v2需要更多内存,Process Explorer则相反 这些都是独立的测量和不同的运行,但数据的重现令人惊讶地可靠 除了上面提到的

尝试对同一个.NET3.5应用程序的两个版本进行前后比较时,我会得到不一致的结果,这取决于我使用的工具

typeperf——我认为这是权威性的——说:

  • v1:244MB/260MB(专用字节/工作集)
  • v2:281MB/296MB
Process Explorer在性能图中显示以下数字:

  • v1:283MB(专用字节)
  • v2:262MB
所以typeperf说v2需要更多内存,Process Explorer则相反

这些都是独立的测量和不同的运行,但数据的重现令人惊讶地可靠

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

  • v1:484MB(完全转储文件大小)
  • v2:480MB
另外,从.net内存档案器运行应用程序时,v2中的本机内存、.net内存以及总内存都低于v1

因此,与世界其他地区相比,它似乎是typeperf(WinDbg分析仍然很出色)


谁是对的,我怎么知道呢?

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

  • v1创建了垃圾并保留了对它的引用(->内存泄漏),所以没有什么需要清理的
  • 但是v2创建了垃圾并释放了引用
当进行完全转储或使用内存分析器时,GC将运行(在后一种情况下,我知道这是事实,在前一种情况下,我猜测是基于转储时私有字节显著下降)


这对我来说就解释了。

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

  • v1创建了垃圾并保留了对它的引用(->内存泄漏),所以没有什么需要清理的
  • 但是v2创建了垃圾并释放了引用
当进行完全转储或使用内存分析器时,GC将运行(在后一种情况下,我知道这是事实,在前一种情况下,我猜测是基于转储时私有字节显著下降)

这对我来说就是原因