OutOfMemoryException - 如何查找内存泄漏?

时间:2011-11-10 04:24:46

标签: c# .net

我正在开发一个WinForm应用程序。当它运行很长时间而不停止时,它突然引发OutOfMemoryException。我不知道如何找到导致此异常的原因。我使用任务管理器来查看我的应用程序要使用多少内存,我看到它只需要90000 KB,而我的RAM是2GB。我不知道是内存泄漏错误?如果是的话,我记得有一些.NET工具可以帮助找到内存泄漏。

请帮帮我。感谢。

2 个答案:

答案 0 :(得分:4)

如果您通过 WinDbg 运行应用程序,您将能够分解内存中的所有对象。异常大的数字将指向导致此行为的确切对象。

你可以follow these instructions

在坚果壳中你做

  1. 将WinDbg附加到进程
  2. 问题 .load SOS.dll 命令
  3. 问题!dumpheap –stat以查看托管对象

答案 1 :(得分:1)

vmmap

一个有用的工具,可以查看您的流程使用的内存量和内存种类。

CLR Profiler

提供堆的图形视图以及保留内容的内容。它可能有点慢,但如果泄漏在托管堆中,它将很容易指出问题的类型。 Here's a guide

WinDBG

就像提到的parapura一样,这会让你找到你的泄漏,但是有一个陡峭的学习曲线(几乎没有gui)。

相关问题