实际上我正在使用多线程进行实时应用。
当我运行时,我的应用程序内存是65 Mb,如果我打开一个子MDI表单,那么内存增加到85mb但如果我关闭子窗口,那么内存仍将保持在85mb。
我使用过Dispose,我已经尝试过使用GC.Collect(),但这些都没有解决我的问题, 所以我对这个问题有点困惑。
你能指导我这个吗?
提前致谢。
答案 0 :(得分:2)
你需要一个好的内存分析器。
有很多选择:
许多花钱(CLR Profiler除外),但通常都有试用版。
启动应用程序后(连接了探查器),您需要在泄漏之前和之后拍摄内存快照,然后比较它们以查看剩下的内容。
很难说你的情况可能是什么问题,因为有很多事情可能导致问题。
答案 1 :(得分:0)
您是否在子MDI表单中使用了一些全局委托引用?
答案 2 :(得分:0)
每次打开新的子窗口时内存是否会增加?如果是这样,打开并关闭其中的几个,然后使用windbg附加到流程。
加载sos之后,你可以使用!dumpheap命令来了解内存泄漏的位置,然后使用gcroot查找泄漏内存的根源。
顺便问一下,您如何在c#中编写“实时应用程序”?
答案 3 :(得分:0)
任务管理器的内存编号并不总是那么犀利,但是这个小技巧可以欺骗这个数字......不适合生产。
public static void RefreshMemory() {
try {
Process curProc = Process.GetCurrentProcess();
curProc.MaxWorkingSet = curProc.MaxWorkingSet;
} catch {
// Handle the exception
}
}