我遇到一个问题,我的应用程序运行好几个小时,然后突然增加内存使用(在几分钟内),直到它崩溃。如果我们在增加的内存使用期间最小化应用程序,内存会下降并保持一段时间。这似乎非常不一致。知道如何解决它/原因可能是什么?
答案 0 :(得分:2)
有很多工具可以帮助您检测出这类问题。试试ANTS Memory Profiler或WinDbg + SOS。
ANTS允许您拍摄快照并进行比较。这将帮助您发现占用额外内存的内容。
WinDbg允许您检查堆。 !dumpheap命令很有用。查找意外数量的实例。要检查GC不回收对象的原因,请使用!gcroot命令。在Tess' blog获取战利品以获取有关WinDBg + SOS的更多信息。
答案 1 :(得分:1)
如果您在最小化应用程序的主窗口时看到它显着减少,那么您正在查看错误的内存诊断。这是工作集,即映射到RAM的虚拟内存量。工作集始终是可变的,它很大程度上取决于其他进程正在运行的内容,并且需要将自己的页面映射到RAM。当应用程序耗尽免费虚拟内存时,应用程序会在OOM上发生爆炸,这是一个完全不同的数字。
是的,使用一个好的内存分析器,以避免得出无法帮助您诊断问题的结论。
答案 2 :(得分:0)
你必须得到一个内存攻击/调试器来缩小研究范围