0

我正在使用 ANTS 内存分析器,目前有点困惑。如果我加载我的站点并将 ANTS 连接到进程,我可以看到大约 90mb 的私有字节,然后我运行相同的例程多次,结果如下:

  1. 109mb
  2. 120mb
  3. 125mb
  4. 126mb
  5. 123mb
  6. 126mb

之后每次尝试它基本上保持在 126mb 左右。我的理解是,如果我有内存泄漏,那么它会keep上升并且不会稳定,但我不明白为什么它会缓慢增长到 126mb。.NET 是否有允许保留的内存量并且刚刚达到该限制?

简单的问题:记忆增长到一定程度然后停止。这对于 .NET 应用程序是否正常?

编辑:刚刚意识到我可能应该在programmers.stackexchange.com上发布这个 - 道歉。

4

2 回答 2

4

“内存泄漏”是指分配了认为不应分配的内存。

不可能简单地查看消耗的内存量并说“你有内存泄漏”。即,如果您的应用程序在内存中收集日志 3 天 - 在这种情况下,内存消耗会增加,但这并不表示泄漏。另一方面,如果您的应用程序只是每分钟打印一行,但内存使用量不断增长,则很可能是泄漏。

于 2012-03-29T15:58:56.207 回答
0

以我的经验,如果我看到内存增长和平稳,它通常来自缓存。如前所述,内存泄漏只是指内存中保留了一些您认为应该被释放的东西。使用分析器是确定泄漏的好方法(与使用任务管理器相比),因为它通常会确保发生第二代垃圾收集,让您可以看到仍在内存中的所有内容。

当我进行分析时,我通常会执行几次我想要测试的命令以确保所有缓存都已发生,然后我将创建一个前后快照并比较内存的增量。如果您使用的是 C# 之类的托管语言,则 +/- 10KB 的增量并不少见。多次重复该过程,如果您的增量始终为正,则很可能存在泄漏(假设您不是故意分配更多内存)。

于 2012-04-26T17:14:55.187 回答