me hizo una prueba corta en instantianting una matriz usando la sintaxis que se describe y se encontró esa creación de instancias con valores no predeterminados tomó aproximadamente 2.2 veces más que la instanciación con valores predeterminados.
Cuando cambio y crea una instancia con valores predeterminados, toma aproximadamente la misma cantidad de tiempo.
De hecho, cuando miré el descompilado, parece que lo que ocurre es que la matriz se inicializa y luego se rellena con cualquier valor que no sea el predeterminado.
instanciar con valores no predeterminados:
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
Instantiating con valores por defecto:
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
Interesante. Me pregunto si este enfoque de "borrado de memoria" para la inicialización de la matriz es una de las razones por las cuales las estructuras no admiten constructores predeterminados explícitos o inicializadores de miembros. Esto complicaría la inicialización de la matriz. – LBushkin
Sí, eso es mucho. De hecho, las estructuras en IL * do * admiten constructores sin parámetros, pero solo se invocarán en determinadas situaciones. –
Consulte http://msmvps.com/blogs/jon_skeet/archive/2008/12/10/value-types-and-parameterless-constructors.aspx para obtener más información. –