我有静态函数,它返回字符串数组。我从循环中调用此函数并将返回值存储到临时数组中。 我的问题是,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.
}
答案 0 :(得分:0)
我的问题是,GC会在第一代清理它,还是会留在第二代。
注意这里的世代是Gen0和Gen1,你的字符串永远不会进入Gen2。
两者都可能发生。当GC在该while循环期间发生时,一些字符串将被使用(可达)并从Gen0升级到Gen1。但概率很低,而且从不超过极少数。
所以不用担心这里。
答案 1 :(得分:0)
由于阵列很短暂,很可能几乎每个实例都会停留在第1代。
无法保证没有实例能够进入第2代,这取决于垃圾收集何时发生以及还有什么进行。然而,这应该是非常罕见的。