c#WinForm应用程序中的许多非托管内存

时间:2013-04-22 07:38:09

标签: c# winforms .net-4.0 unmanaged ram

我有一个c#winform应用程序。现在启动后显示主屏幕时,我有大量的非托管内存大约110MB,整个托管内存约为20 MB。

这里有些事情可能不常见:

  • 该应用程序包含许多文件大小为98 MB的程序集。
  • 某些表单有一个wpfhost,但这次加载了(但可能是其他一些WPF框架库)
  • Ram似乎没有成长。
  • 有许多字符串显示其中许多字符串是WPF的一部分,如“margin”
  • 主要形式非常大,并且具有大约30行的infragistics datagrif。

当我在控制台应用中加载 Assembly.Load 的所有程序集时,它们只需要1 MB的非托管RAM。

这种非托管内存可以来自哪里? 有人能否暗示我可以参与哪些元素?

2 个答案:

答案 0 :(得分:0)

解决方案:使用工具和分析解决方案分析您的代码!

有很多字符串显示其中许多字符串是WPF的一部分,如“margin”

小心使用“Strings”!如果处理得好,垃圾收集者不喜欢并且往往会捡到很多垃圾。

我建议你一个非常好的程序,它将有助于显示应用程序中分配内存的时间和位置! 微软的“ CLR Profiler ”。是一个很好的应用工具。 Net,C#Asp。 Spéciallement针对使用垃圾收集器的应用程序进行了研究,以计算分配给应用程序的内存的性能和大小。 我自己使用并允许我大大减少内存使用量。

How use clr profiler

Download clr profiler

答案 1 :(得分:0)

我已经使用过探查器(ANTS Profiler)现在终于找到了原因。

问题在于winform应用程序是WPF元素主机。 这需要大约25 MB的unmanagedram(用于wpf环境的Ithinkg),然后大约50MB来自DevExpress和Infragistics控件:-(

这不是太多但我可以使用它们的以下控件重现它: 1空网格 1空树 1 RichtextCon1trol 1 Outlookpane

我认为他们都有某种初始化的框架