2011-10-27 129 views
-1

.NET垃圾回收必须有一个秘密,我现在还不明白。 我们的C#WinForms应用程序有一个对话框,通过OR映射器工具加载非常多的对象。这个过程消耗了大量的内存,我们认为这些内存大部分都可以被字符串占用。当我们打开这个对话框时,任务管理器显示了900MB的内存使用情况,并且通过再次执行查询,我们得到了内存不足异常。 Whow。c#和垃圾回收

现在我们得到了一些类型的垃圾收集完成时的tipp,当我们最小化应用程序。通过这样做并再次最大化,应用程序仅消耗10MB。凉。

但是现在,当我们再次执行查询时,内存消耗突然跳回到900MB,我们再次遇到内存不足异常。

这里发生了什么,我们如何减少我们的内存消耗?在这种情况下,如何研究和减少内存消耗?

+0

您是否使用过诸如ANTS Memory Profiler等工具来查看哪些对象占用了太多内存? –

+6

任务管理器不是诊断此问题的正确工具。 –

+1

你回答了你自己的问题:不要使用太多的记忆! –

回答

0

有一堆.Net内存分析器可用于帮助诊断这样的问题。我最喜欢的是dotTrace by JetBrains

+0

这是一个真正的问题,我可以用内存分析器解决。它与字符串无关,它是用户的广泛使用,在代码中不容易看到。 –

0

你确定你所有的循环都完成了。我知道我在桌面应用程序中遇到的最大问题是环路卡住或无法成功结束。你确定你的查询回来了吗?

您是否在做更多,然后只是查询?我会确保您的所有流程都正确启动并完成。

+0

那么我们使用这个OR映射器,通常工作非常好。在这种情况下,有什么不对。我们正在加载对象,然后使用Linq在它们中的一些之间创建关联。 –