簡體   English   中英

靜態函數返回字符串數組Visual C#會發生什么?

[英]What happens with static function returning string array Visual C#?

我有返回字符串數組的靜態函數。 我從循環中調用此函數,並將返回值存儲到臨時數組中。 我的問題是,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.
 }

我的問題是,GC是否會在第一代中清理掉它,還是第二代時會保留下來?

注意這里的世代是Gen0和Gen1,您的字符串永遠不會進入Gen2。

兩者都有可能發生。 當GC在該while循環期間發生時,某些字符串將被使用(可達)並從Gen0升級到Gen1。 但是可能性很小,而且很少。

因此,無需擔心。

由於陣列壽命很短,因此幾乎每個實例都可能會保留在第一代中。

無法保證沒有實例會進入第二代,這取決於何時發生垃圾回收以及發生了什么。 但是,這種情況應該很少見。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM