2013-04-22 99 views
1

我有一個C#winform應用程序。現在啓動後,顯示主屏幕時,我有大量的非託管內存大約110MB,整個管理內存大約爲20 MB。c#WinForm應用程序中的許多非託管內存

這裏有些東西,可能是不尋常的:

  • 該應用程序包含許多組件,其在總98 MB的文件大小。
  • 某些表單有一個wpfhost,但是這次加載(但可能是其他一些WPF框架庫)
  • Ram似乎不會增長。
  • 顯示了很多字符串,其中很多是WPF的一部分,如「邊距」
  • 主窗體非常大,並且具有大約30行的infragistics數據存儲區。

當我在一個控制檯應用程序加載所有組件用Assembly.Load,他們只花了1 MB RAM的非託管的。

這個非託管內存從哪裏來? 有人可以給我一個暗示什麼樣的元素可以參與嗎?

+0

堆分析器應該表現出這一點。你試過嗎?(MS有一個,我相信dotTrace,WinDbg和其他可能有類似的功能) – sehe 2013-04-22 07:43:42

+0

現在你可以推薦一個嗎?我從來沒有這個頭。我只使用目前的螞蟻探查器。很久以前,我使用SOS和Windbg。你可以給我一些關於如何在.net中加載配置文件的資源嗎? – 2013-04-22 07:44:44

+0

如果我記得這個名字,我會提到它。然而,'堆分析器.NET'是一個非常友好的Google術語。我認爲,這會花費更少的時間,而不是在評論中詢問我。 – sehe 2013-04-22 07:52:24

回答

0

解決方案:使用工具和分析解決方案分析您的代碼!

有顯示其中不乏很多字符串的WPF類似「保證金」的一部分

要小心使用「字符串」的!垃圾收集器不喜歡,並且如果處理完成,傾向於收集大量廢物。

我建議你一個非常好的程序,這將有助於顯示在應用程序中分配內存的時間和位置! 「CLR Profiler」by microsoft。是一個很好的應用程序工具。 Net,C#Asp。 Spéciallement研究了使用垃圾回收器的應用程序來計算分配給應用程序的內存的性能和大小。 我自己使用並允許我大大減少內存使用量。

How use clr profiler

Download clr profiler

0

我已經使用分析器(螞蟻探查)現在終於讓我找到原因。

問題在於,winform應用程序是一個WPF元素主機。 這需要大約25 MB unmanagedram(Ithinkg爲WPF環境),然後約50MB從DevExpress的拍攝和Infragistics的控制:-(

這太多的werent很多,但我可以與他們的以下控件重現: 1空網格 1空樹 1 RichtextCon1trol 1 Outlookpane

我認爲它們都具有某種框架被初始化

相關問題