C# 数组成员引用和垃圾收集
如果数组的一个成员一直被引用,那么整个数组将不会被垃圾收集 例如,一种方法:C# 数组成员引用和垃圾收集,c#,arrays,garbage,C#,Arrays,Garbage,如果数组的一个成员一直被引用,那么整个数组将不会被垃圾收集 例如,一种方法: void ParseUtility(string strInput, out string header) { header = ""; string[] parsed = strInput.Split(','); if ((parsed != null) && (parsed.Length > 0)) {
void ParseUtility(string strInput, out string header)
{
header = "";
string[] parsed = strInput.Split(',');
if ((parsed != null) && (parsed.Length > 0))
{
header = parsed[0];
}
return;
}
从该方法返回时,只要使用“header”,整个字符串数组“parsed”就会被保留?情况并非如此
string
是一个类,因此任何string
实例都具有独立的存在性-数组的每个元素仅引用一个string
,而header=parsed[0]
保留对string
的引用,而不是对数组的引用。数组是否可以GC’ed完全取决于数组本身是否可以访问。不应该。“已解析”有一个对已解析[0]的引用,而不是相反。这意味着,.net framework始终以最小的引用单位维护对象对于List、HashSet等,框架获取其独立的List或HashSet子成员集合?是;即使您有一个很小的类,它的唯一成员是一个bool
,该类的实例也会被单独跟踪和GC'ed。