Я провел небольшой тест на instantianting массива, используя синтаксис вы описываете и нашел что создание экземпляров с значениями, отличными от значений по умолчанию, сократилось примерно в 2,2 раза дольше, чем мгновенное значение со значениями по умолчанию.
Когда я переключался и создавал значения по умолчанию, это занимает примерно такое же количество времени.
Действительно, когда я смотрел на декомпиляцию, кажется, что происходит то, что массив инициализируется, а затем заполняется любыми значениями, которые не являются стандартными.
Инстанцирование с не значения по умолчанию:
bool[] abPrimes = new[] {
true, true
};
0000007e mov edx,2
00000083 mov ecx,79114A46h
00000088 call FD3006F0
0000008d mov dword ptr [ebp-64h],eax
00000090 mov eax,dword ptr [ebp-64h]
00000093 mov dword ptr [ebp-54h],eax
00000096 mov eax,dword ptr [ebp-54h]
00000099 cmp dword ptr [eax+4],0
0000009d ja 000000A4
0000009f call 76A9A8DC
000000a4 mov byte ptr [eax+8],1
000000a8 mov eax,dword ptr [ebp-54h]
000000ab cmp dword ptr [eax+4],1
000000af ja 000000B6
000000b1 call 76A9A8DC
000000b6 mov byte ptr [eax+9],1
000000ba mov eax,dword ptr [ebp-54h]
000000bd mov dword ptr [ebp-40h],eax
Инстанцирование со значениями по умолчанию:
bool[] abPrimes2 = new[] {
false, false
};
000000c0 mov edx,2
000000c5 mov ecx,79114A46h
000000ca call FD3006F0
000000cf mov dword ptr [ebp-68h],eax
000000d2 mov eax,dword ptr [ebp-68h]
000000d5 mov dword ptr [ebp-54h],eax
000000d8 mov eax,dword ptr [ebp-54h]
000000db mov dword ptr [ebp-5Ch],eax
Интересно. Я задаюсь вопросом, является ли этот метод «уничтожения памяти» инициализацией массива одной из причин, почему структуры не поддерживают явные конструкторы по умолчанию или инициализаторы элементов. Это усложнит инициализацию массива. – LBushkin
Да, это очень много. На самом деле, структуры в IL * do * поддерживают безпараметрические конструкторы, но они будут вызываться только в определенных ситуациях. –
См. Http://msmvps.com/blogs/jon_skeet/archive/2008/12/10/value-types-and-parameterless-constructors.aspx для получения дополнительной информации. –