【问题标题】:Memory footprint constantly increasing in WPF/Winform applicationWPF/Winform 应用程序中的内存占用不断增加
【发布时间】:2015-04-22 15:15:49
【问题描述】:

这个问题似乎与我在 WPF 窗口中托管 Winform 控件的程序部分无关。

用户会看到 X 行,并且可以在任意行上单击“编辑”以打开另一个窗口(

每次进行新选择并加载新的编辑窗口时,内存使用量都会增加 1 到 4 兆。我已经尝试在该窗口关闭时将所有对象归零/处置,但没有任何区别。

只有这个窗口会导致内存持续上升并且永远不会下降。即使我关闭了除主窗口之外的所有窗口,内存占用量仍保持在原来的位置。

【问题讨论】:

  • 发生这种情况的原因有很多。您是否根据需要分离事件处理程序?您是否正在处理一次性实例?
  • 我正在处理有 Dispose() 可用的东西。将“= null”用于其他一些事情。确保分离事件处理程序的最佳方法是什么?
  • 在 Winform 窗口关闭后,垃圾收集器不一定会运行,这是毫无价值的。它只会在感觉需要时运行。您是否强制 gc(例如使用 PerfView)查看内存是否下降?
  • 试过强制 GC,Windows 似乎不在乎。

标签: c# .net wpf winforms winforms-interop


【解决方案1】:

最简单的解决方案是在打开窗口之前和之后对内存进行内存快照,然后查看分配了哪些新对象。例如,您可以使用内存分析器 dotMemory 来做到这一点。

您还可以在 dotMemory 中自动查看泄漏了哪些事件处理程序。

【讨论】:

    【解决方案2】:

    Alexey 也说过我将如何解决这个问题。分析内存可以显示程序的许多问题。

    Microsoft 提供了两种工具供您使用。一个是CLR Profiler,另一个是Performance Analysis Tool,其中还包括CLR 内存信息。我会选择这两者中的前者。

    【讨论】:

      猜你喜欢
      • 2013-10-14
      • 1970-01-01
      • 2020-12-25
      • 2023-03-07
      • 1970-01-01
      • 2015-10-17
      • 1970-01-01
      • 2014-09-11
      • 2012-01-11
      相关资源
      最近更新 更多