我有一个c#winform应用程序。现在启动后显示主屏幕时,我有大量的非托管内存大约110MB,整个托管内存约为20 MB。
这里有些事情可能不常见:
当我在控制台应用中加载 Assembly.Load 的所有程序集时,它们只需要1 MB的非托管RAM。
这种非托管内存可以来自哪里? 有人能否暗示我可以参与哪些元素?
答案 0 :(得分:0)
解决方案:使用工具和分析解决方案分析您的代码!
•有很多字符串显示其中许多字符串是WPF的一部分,如“margin”
小心使用“Strings”!如果处理得好,垃圾收集者不喜欢并且往往会捡到很多垃圾。
我建议你一个非常好的程序,它将有助于显示应用程序中分配内存的时间和位置! 微软的“ CLR Profiler ”。是一个很好的应用工具。 Net,C#Asp。 Spéciallement针对使用垃圾收集器的应用程序进行了研究,以计算分配给应用程序的内存的性能和大小。 我自己使用并允许我大大减少内存使用量。
答案 1 :(得分:0)
我已经使用过探查器(ANTS Profiler)现在终于找到了原因。
问题在于winform应用程序是WPF元素主机。 这需要大约25 MB的unmanagedram(用于wpf环境的Ithinkg),然后大约50MB来自DevExpress和Infragistics控件:-(
这不是太多但我可以使用它们的以下控件重现它: 1空网格 1空树 1 RichtextCon1trol 1 Outlookpane
我认为他们都有某种初始化的框架