2012-07-11 48 views
0

我即將部署我的新WPF應用程序,我剛剛注意到在任務管理器中它消耗了大量內存。所以我下載了一個RedGate Antz的試用版,試圖找出造成這個問題的原因,我驚訝地發現大約90MB的非託管內存使用情況。由於Antz不支持未損壞的內存,我嘗試使用Windbg,這並沒有指出它本身的高使用率。這使我相信它必須是我正在加載的DLL之一。我在我的應用程序中使用了DevExpress控件。高非託管內存 - WPF應用程序

一個有趣的功能是當我最小化我的應用程序時,內存從110 MB下降到6-10 MB。

我應該擔心嗎?

這是我的第一個WPF應用程序,我不完全確定在內存使用方面會發生什麼。最小化這種記憶的事實是否被重新獲得/放棄了一切都好的跡象?

有什麼想法或想法是什麼可能導致這將是最有幫助的。

+0

然後我會看用戶界面。你有一些位圖嗎?你有沒有虛擬化的長時間重複控制?所以110mb是一個問題? – Paparazzi 2012-07-11 15:17:22

+0

我的無知的道歉,你是什麼意思一個長的中繼器控制? – Emlyn 2012-07-11 15:38:39

+0

ListView不是一個很好的例子,因爲它默認進行虛擬化。假裝你已經虛擬化了,並將它綁定到有很多行的源,那麼它會吃掉很多的UI內存。但我懷疑這是問題所在。 – Paparazzi 2012-07-11 15:52:01

回答

2

如果你想知道是什麼導致了它,我已經與SciTech的.Net Memory Profiler(memprofiler.com)好運了。

由於.Net運行時的性質,如果您運行在擁有大量內存的機器上,那麼它通常會嘗試使用它。如果您開始看到與其相關的性能問題,那麼您應該擔心,通常無論如何都要意識到正在使用資源的情況是很好的。內存不足的一個可能原因是其中一個DLL可能會掛鉤到主窗口的事件並在最小化時調用垃圾回收。

如果您擔心高內存使用率的問題,您可以使用一些技巧來處理TaskManager中顯示的數字(如p /調用SetProcessWorkingSetSize),但這似乎並不是您真正想要的'正在問。