【问题标题】:Clearing up large fields from memory in long lived objects从长寿命对象的内存中清除大字段
【发布时间】:2010-12-04 14:32:15
【问题描述】:

.NET 3.5,我有一些类可以存储多达 1MB 的字符串。即使我需要很长时间的对象,我也不需要长时间存储字符串。

如何在不释放父对象的情况下真正从内存中删除字符串。

在这种情况下使用“myString = null”是一个好习惯吗?还是应该将它包装在一个私有的 dsposable 类或其他东西中?

【问题讨论】:

    标签: c# .net memory garbage-collection dispose


    【解决方案1】:

    您可能在程序中的其他地方引用或复制字符串(比如在 TextBox 中?),这使它在内存中保持活跃。

    【讨论】:

    • 我试图追踪他们,但到目前为止,那个部门还没有运气:)
    【解决方案2】:

    你考虑过WeakReference 吗?

    【讨论】:

    • 我实际上已经实现了它,但不喜欢将其更改为自定义缓存。老实说,我不太确定内存泄漏在哪里,也许我的字符串超出了内存就好了。找不到可以分析复杂应用程序的适当内存分析器。
    • 见:msdn.microsoft.com/en-us/library/ms404247.aspx。正如文章所说,“避免使用弱引用作为内存管理问题的自动解决方案。相反,应制定有效的缓存策略来处理应用程序的对象。”
    • @MusiGenesis 这就是我改变设计的原因:)
    • @dr. evil: 几年前我让一位同事经历了一个阶段,他开始使用 Wea​​kReferences everywhere 。我会投票赞成将 WeakReference 从 .Net 中完全删除。
    • :) 我明白了,是的,我实际上对他们的设计很感兴趣,但实际上它们并不那么酷:D
    【解决方案3】:

    IDisposable 与内存管理无关。将null 分配给私有变量就可以了。看看Flyweight 是否适合你。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-26
      • 1970-01-01
      • 2016-04-25
      • 1970-01-01
      • 2016-01-12
      • 1970-01-01
      • 2011-02-22
      • 1970-01-01
      相关资源
      最近更新 更多