【问题标题】:WinForms App Memory LeakWinForms 应用程序内存泄漏
【发布时间】:2011-05-17 22:15:44
【问题描述】:

我正在使用由 IdeaBlade 和 DevExpress 构建的 WinForms 应用程序......在我看来,DevExpress 控件正在导致对象在内存中持久存在。我正在尝试找出阻止垃圾收集器移除的原因,但收效甚微。

谁能推荐一款分析应用程序,该应用程序擅长查找哪些处理程序等在内存中保存项目?

我使用过 AQTime 7 Pro 和 .Net Memory Profiler,但它们似乎都没有明确导致问题的原因。

干杯!

【问题讨论】:

  • 你能指定什么DevExpress控件和什么对象吗?它们是否连接到 DevExpress 控件?您是否尝试过添加 Finalize() 覆盖以查看对象是否实际上正在离开内存?
  • @minitech - 在这个阶段,我只关注 DevExpress.XtraGrid.GridControl,但使用任何 DevExpress 控件或对象的每个表单都有相同的问题。我注意到的是,使用此控件打开表单会增加约 4mb 的内存使用量。当您退出窗体时,不会释放内存。再次打开表单会增加 4 mb 的内存。使用 AQtime 7 Pro 查看它显示了表单、控件和 xtragrid 绑定管理器仍然是内存中的对象,但它没有解释是什么将它们保存在那里。看来 DevExpress 可能是问题所在。
  • 您可能需要注意,.NET 垃圾收集器可以在任意时间收集未使用的内存,通常是当它感觉需要额外的内存或您的应用程序长时间空闲时,等等实际上可能没有任何问题。尝试创建数千个表单,在每次创建后记录内存使用情况,并查看是否有任何下降。如果有,您可能没有任何问题。 DevExpress 控件可能只是加载大量共享资源,例如图像等。
  • @minitech 是的,我知道,内存不时被释放,但总体而言,应用程序膨胀。在几个小时的认真使用中,它的内存从 150mb 增加到 700mb。您可以坐在那里一遍又一遍地打开/关闭同一个表单,并且永远不会释放内存。
  • 我的意思是尝试以编程方式。如果你有很多内存,它可能不会释放,或者某些情况可能会减慢 GC。

标签: vb.net devforce


【解决方案1】:

来自 Red Gate 的ANTS Memory Profiler 可能会成功。

免责声明:其他内存分析器可用。

【讨论】:

  • 似乎不适合使用 DevExpress。打开此应用程序时崩溃,抱怨找不到 DevExpress .dll ......令人困惑,是的!我没有费心去弄清楚为什么。
【解决方案2】:

dotTrace MemorydotTrace Performance 非常有能力处理密集型 GUI 应用程序,而 ANTS 分析器做得不好。

dotTrace 会逐行告诉你罪魁祸首在哪里。 dotTrace 由为我们提供 ReSharper 的 JetBrains 制作。

【讨论】:

  • 有dorTrace记忆的教程吗?我不知道如何破译将对象保存在内存中的原因。
猜你喜欢
  • 1970-01-01
  • 2016-03-28
  • 2010-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-05
相关资源
最近更新 更多