如何判断是否有内存泄漏?

时间:2012-03-29 15:50:36

标签: c# memory memory-management memory-leaks red-gate-ants

我正在使用ANTS内存分析器,目前有点困惑。如果我加载我的网站并挂起ANTS直到进程,我可以看到大约90mb的私有字节,然后我运行相同的例程一段时间,结果如下:

  1. 了109M
  2. 120MB
  3. 125MB
  4. 126mb
  5. 123mb
  6. 126mb
  7. 并且每次尝试后它基本上保持在126mb左右。我的理解是,如果我有内存泄漏,那么keep会上升而不能解决,但我不明白的是为什么它会缓慢增长直到126mb。 .NET是否有允许保留的内存量,而且只是达到了这个限制?

    简单的问题:记忆正在逐渐增长,然后停止。这对.NET应用程序来说是正常的吗?

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

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:0)

根据我的经验,如果我看到内存增长和稳定,通常来自缓存。如前所述,内存泄漏只是在内存中存在您觉得应该已经释放的内容时。使用分析器是确定泄漏的一种很好的方法(与使用任务管理器相比),因为它通常会确保发生第二代垃圾回收,允许您查看仍在内存中的所有内容。

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