【问题标题】:In .NET, will cleaning a nested dictionaries parent release all memory upon garbage collection?在 .NET 中,清理嵌套字典父级会在垃圾收集时释放所有内存吗?
【发布时间】:2011-02-02 22:03:38
【问题描述】:

我有以下嵌套字典:

  1. Dictionary<int, Dictionary<string, object>> x;
  2. Dictionary<int, SortedDictionary<long, Dictionary<string, object>>> y;

如果我执行x.Clear() 和y.Clear() 是否会清除所有嵌套对象并在下一次垃圾回收时重用所有内存?

或者我是否需要迭代所有项目并手动清除它们?

【问题讨论】:

  • 注意实现 IDisposable 的对象。

标签: c# .net collections dictionary garbage-collection


【解决方案1】:

如果您的代码的其他部分无法访问您的任何对象,则它们都将被垃圾回收。

如果这将在下一次垃圾回收时完成,取决于它们所属的代。

来自 Jeffrey Richter 的This article 解释了很多。

【讨论】:

  • 当然,确定这可能是困难的部分,但本质上这就是 GC 的工作原理。
【解决方案2】:

这对任何事情都是一样的:GC 从它的根(堆栈上的变量和其他各种奇怪的情况)开始,并通过以下引用遍历可达对象树。该过程未找到的任何对象都将符合收集条件。

因此,只要您删除的子词典无法通过其他方式访问,它们就会被收集。

【讨论】:

    【解决方案3】:

    也许是的。

    如果您引用字典中的项目,无论值参数的类型如何,都不会收集这些对象。

    但是如果没有引用,那么它们将被收集(在某个时候)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-22
      • 2019-05-15
      • 1970-01-01
      • 2019-02-10
      • 2016-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多