【问题标题】:Array member reference and garbage collection数组成员引用和垃圾回收
【发布时间】:2015-11-05 05:23:59
【问题描述】:

如果一个数组的成员一直被引用,整个数组不会被垃圾回收?

例如,一个方法:

    void ParseUtility(string strInput, out string header)
    {
        header = "";

        string[] parsed = strInput.Split(',');
        if ((parsed != null) && (parsed.Length > 0))
        {
            header = parsed[0];
        }
        return;
    }

从该方法返回时,只要使用 'header',整个字符串数组 'parsed' 将被保留?

【问题讨论】:

    标签: c# arrays garbage


    【解决方案1】:

    事实并非如此。 string 是一个类,因此任何 string 实例都有独立的存在 - 数组的每个元素都引用 stringheader = parsed[0] 保留对 string 的引用,而不是数组。数组是否可以被 GC 完全取决于数组本身是否可达。

    【讨论】:

    • 这意味着,.net 框架总是以最小的参考单位来维护对象? - 对于 List、HashSet 等,框架获取 List 或 HashSet 的子成员的独立集合?
    • 是的;即使您有一个小类,其唯一成员是单个 bool,该类的实例也会被单独跟踪和 GC。
    【解决方案2】:

    不应该。 parsed 引用了 parsed[0] 而不是相反。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-20
      • 2011-01-30
      • 2015-11-13
      • 2013-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多