C#集合初始化语法是否避免默认初始化开销

使用新的C#集合初始化语法时:

string[] sarray = new[] { "A", "B", "C", "D" };

编译器是否避免将每个数组槽初始化为默认值,或者它是否等效于:

string[] sarray = new string[4];  // all slots initialized to null
sarray[0] = "A";
sarray[1] = "B";
sarray[2] = "C";
sarray[3] = "D";
最佳答案
编译器仍然使用newarr IL指令,因此CLR仍将初始化数组.

集合初始化只是编译器的魔力–CLR对它一无所知,所以它仍然认为它必须做清理.

然而,这应该真的,非常快 – 它只是擦拭记忆.我怀疑在许多情况下这是一个重大的开销.

转载注明原文:C#集合初始化语法是否避免默认初始化开销 - 代码日志