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

本文关键字:内存 WinForm 应用程序 | 更新日期: 2023-09-27 18:10:27

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

这里有一些不常见的东西:

  • 应用程序由许多程序集组成,这些程序集的文件大小总计为98 MB。
  • 一些表单有一个wpfhost,但这一次是加载的(但可能是一些其他WPF框架库)
  • 公羊似乎没有生长。
  • 显示了许多字符串,其中许多是WPF的一部分,如"margin"
  • 主表单是相当大的,有一个大约30行的inffragistics数据集。

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

这些非托管内存从何而来?有人能给我一个提示,可能涉及哪些因素吗?

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

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

显示了许多字符串,其中许多是WPF的一部分,如"margin"

小心使用"Strings"!如果处理得好,垃圾收集者不喜欢并倾向于收集大量的垃圾。

我向您推荐一个非常好的程序,它将有助于显示在您的应用程序中何时何地分配了内存!CLR Profiler是一个很好的应用工具。. Net, c#, Asp。为使用垃圾收集器的应用程序研究spsamciallement,以计算分配给应用程序的性能和内存大小。我自己使用并允许我大大减少内存使用。

如何使用clr profile

下载clr profile

我已经使用了分析器(ANTS profiler),现在我终于找到了原因。

问题是在那个winform应用程序中是一个WPF元素主机。这需要大约25mb的非管理内存(我认为对于wpf环境),然后大约50MB从DevExpress和inffragistics控件中获取:-(

)

这不是太多,但我可以用下面的控制来复制它:1空网格1空树1 RichtextCon1trol1 Outlookpane

我想它们都有一些框架被初始化了