我怎么知道我是否有内存泄漏



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

  1. 1.09亿
  2. 120亿
  3. 1.25亿
  4. 1.26亿
  5. 1.23亿
  6. 1.26亿

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

一个简单的问题:记忆是成长到一个点,然后停止。这对于.NET应用程序来说正常吗?

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

"内存泄漏"是指您认为不应该分配的内存被分配。

简单地看消耗的内存量并说"内存泄漏"是不可能的。也就是说,如果您的应用程序在内存中收集日志3天,该怎么办?在这种情况下,内存消耗会增加,但这并不是泄漏的迹象。另一方面,若您的应用程序只是每分钟打印一行,但内存使用量不断增加,那个么它就是一个漏洞。

根据我的经验,如果我看到内存增长和稳定,通常来自缓存。如前所述,内存泄漏只是指内存中的某些东西,您觉得应该被释放。使用探查器是确定泄漏的好方法(与使用任务管理器相比),因为它通常可以确保第二代垃圾收集已经发生,使您能够查看内存中的所有内容。

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

相关内容

  • 没有找到相关文章

最新更新