OutOfMemoryException - 如何查找内存泄漏?

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

这些发现可能会对你有所帮助。https://dev59.com/iFDTa4cB1Zd3GeqPKpwj - Nayan
2个回答

4
如果您通过WinDbg运行应用程序,您将能够获得内存中所有对象的详细信息。异常数量会指出导致此行为的确切对象。
您可以按照以下说明操作 简而言之,您需要:
  1. 将WinDbg附加到进程
  2. 发出.load SOS.dll命令
  3. 发出!dumpheap –stat以查看托管对象

WinDbg并不容易使用,但它是非常强大的工具。+1。 - Ekk

1

vmmap

这是一个非常有用的工具,可以查看进程使用了多少内存以及使用了哪种类型的内存。

CLR Profiler

提供堆的图形化视图,可以清楚地看到哪些对象占用了内存。虽然速度有点慢,但如果泄漏在托管堆中,它会很容易地指出问题所在。这里有一份指南

WinDBG

就像parapura提到的那样,这个工具可以帮助你找到内存泄漏,但是需要学习曲线比较陡峭(几乎没有图形界面)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接