2010-02-19 47 views
3

我遇到了一个问题,我的应用程序可以正常运行几个小时,但突然间会增加内存使用量(几分钟内),直至崩溃。如果我们在增加内存使用量的过程中最小化应用程序,内存就会下降并停留一段时间。这似乎很不一致。任何想法如何解决它/原因可能是什么?突然的内存过度使用

回答

0

我们需要更多信息,比如您是否使用任何资源,如数据库连接。 你是否使用using语句或最后尝试catch来确保你的db连接被清除了?

它是基于文件资源的应用程序吗?我们需要更多信息,可能还有示例代码?

+0

没有数据库或文件。但是,我们使用很多BackgroundWorker线程来处理非UI工作。 – Sadhana 2010-02-19 15:28:52

2

有很多工具可以帮助您检测这类问题。试试ANTS Memory ProfilerWinDbg + SOS

ANTS允许您拍摄快照并进行比较。这将帮助您找出正在占用额外内存的内容。

WinDbg允许您检查堆。 !dumpheap命令很有用。查找意外数量的实例。要检查GC为什么不回收对象,请使用!gcroot命令。有关WinDBg + SOS的更多信息,请参阅Tess' blog

0

你必须让内存的敲钉器/调试器来缩小研究

1

您正在寻找在错误的内存诊断,如果你看到它时,你最小化应用程序的主窗口显著下降。这是工作集,即映射到RAM的虚拟内存量。工作集总是可变的,它主要取决于其他进程正在运行,并且需要将自己的页面映射到RAM。当应用程序耗尽空闲虚拟内存时,该应用程序会轰炸OOM,这是一个完全不同的数字。

是的,使用良好的内存分析器来避免做出无助于诊断问题的结论。