1

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

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

  • 该应用程序由许多总成 98 MB 文件大小的程序集组成。
  • 一些表单有一个 wpfhost,但这次加载了(但可能是其他一些 WPF 框架库)
  • 公羊似乎没有增长。
  • 有很多字符串显示其中许多是 WPF 的一部分,例如“margin”
  • Main 表单很大,有一个大约 30 行的基础数据集。

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

这个非托管内存从哪里来?有人可以告诉我可能涉及哪些元素吗?

4

2 回答 2

0

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

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

这并没有太多,但我可以使用它们的以下控件来重现它: 1 空网格 1 空树 1 RichtextCon1trol 1 Outlookpane

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

于 2013-04-22T10:30:22.197 回答
0

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

•<strong>显示了很多字符串,其中许多是 WPF 的一部分,例如“margin”

小心使用“字符串”!如果处理得当,垃圾收集器不喜欢并且倾向于拾取大量垃圾。

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

如何使用 clr profiler

下载 clr 分析器

于 2013-04-22T09:58:13.573 回答