1

我们有一个 .NET 服务在启动时使用约 30MB 的内存。(VM ~= Mem 使用情况)
我想转储进程并找出持有这些 30MB 的内容。

生成迷你转储的 CDB 调试器将内存使用量增加了 100MB
从转储中我可以看到那 100MB 是图像内存(DLL)

-------------------- Usage SUMMARY --------------------------
    TotSize (      KB)   Pct(Tots) Pct(Busy)   Usage
    2d07000 (   46108) : 02.20%    28.45%    : RegionUsageIsVAD
   761ac000 ( 1935024) : 92.27%    00.00%    : RegionUsageFree
    64b0000 (  103104) : 04.92%    63.62%    : RegionUsageImage
     900000 (    9216) : 00.44%    05.69%    : RegionUsageStack
       9000 (      36) : 00.00%    00.02%    : RegionUsageTeb
     380000 (    3584) : 00.17%    02.21%    : RegionUsageHeap
          0 (       0) : 00.00%    00.00%    : RegionUsagePageHeap
       1000 (       4) : 00.00%    00.00%    : RegionUsagePeb
       1000 (       4) : 00.00%    00.00%    : RegionUsageProcessParametrs
       2000 (       8) : 00.00%    00.00%    : RegionUsageEnvironmentBlock
       Tot: 7fff0000 (2097088 KB) Busy: 09e44000 (162064 KB)

在调试器分离后很久,内存使用率仍然很高。我想知道这个图像加载/内存增加的原因是什么?

谢谢。

4

2 回答 2

3

“通常,未使用的页面不是工作集的一部分,只是地址空间的一部分。当您创建完整转储时,地址空间中的所有页面都被读入,并写入磁盘。只要大小dump基本上相当于进程地址空间的大小,你描述的都是意料之中的。”

我从Ivan Brugiolo 和 Pavel Lebedinsky那里得到了答案。

于 2010-02-10T07:00:46.357 回答
-1

您可以使用分析器来分析内存消耗。

  1. NProfiler -开源软件
  2. NCover - 不是免费的
于 2010-02-03T09:51:49.093 回答