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