静态函数返回字符串数组Visual C#会发生什么?

时间:2014-06-06 16:58:39

标签: c# .net garbage-collection

我有静态函数,它返回字符串数组。我从循环中调用此函数并将返回值存储到临时数组中。 我的问题是,GC会在第一代清理它,还是会留在第二代。

您可以在下面看到代码段。

-----------更新代码----------------------------

感谢您的回复。 假设这样清理字符串数组我会有这样的东西吗?

    public static string[] SplitString(string strLine_)
    {
        string[] bit_ = strLine_.Split(new[] { ' ', '\t' }, StringSplitOptions.RemoveEmptyEntries);
    return bit_;
    }

// ------在不同的函数里面-------------- //

   private void Foo()
   {
       while (numOfVolElts > count)
       {
           line = sr_.ReadLine();

            if (!string.IsNullOrEmpty(line))
            {
                string[] bit4 = Definitions.SplitString(line);
                for (int j = 0; j < bit4.Length; j++)
                {
                    int matNum = Convert.ToInt32(bit4[j]);
                    volElements[count].matnr = matNum;
                    count++;

                    if (matNum > numMaterials)
             numMaterials = matNum;
        } 
   }
    }
    //GC.Collect(); //I know it's not recommended to call GC manually //but for this   testing purpose to check if it cleans up string //array.
 }

2 个答案:

答案 0 :(得分:0)

  

我的问题是,GC会在第一代清理它,还是会留在第二代。

注意这里的世代是Gen0和Gen1,你的字符串永远不会进入Gen2。

两者都可能发生。当GC在该while循环期间发生时,一些字符串将被使用(可达)并从Gen0升级到Gen1。但概率很低,而且从不超过极少数。

所以不用担心这里。

答案 1 :(得分:0)

由于阵列很短暂,很可能几乎每个实例都会停留在第1代。

无法保证没有实例能够进入第2代,这取决于垃圾收集何时发生以及还有什么进行。然而,这应该是非常罕见的。