2011-10-27 176 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在它們中的一些之間創建關聯。 –