(fondo: Why should I use int instead of a byte or short in C#)int, el rendimiento a corto byte en la espalda con espalda para-bucles
para satisfacer mi propia curiosidad acerca de los pros y los contras de usar el número entero "tamaño adecuado" frente a la "optimizado" integer escribí el siguiente código que reforzaba lo que antes era cierto sobre el rendimiento int en .Net (y que se explica en el enlace anterior), que es que está optimizado para el rendimiento int en lugar de corto o byte.
DateTime t;
long a, b, c;
t = DateTime.Now;
for (int index = 0; index < 127; index++)
{
Console.WriteLine(index.ToString());
}
a = DateTime.Now.Ticks - t.Ticks;
t = DateTime.Now;
for (short index = 0; index < 127; index++)
{
Console.WriteLine(index.ToString());
}
b=DateTime.Now.Ticks - t.Ticks;
t = DateTime.Now;
for (byte index = 0; index < 127; index++)
{
Console.WriteLine(index.ToString());
}
c=DateTime.Now.Ticks - t.Ticks;
Console.WriteLine(a.ToString());
Console.WriteLine(b.ToString());
Console.WriteLine(c.ToString());
Esto da resultados más o menos constantes en la zona de ...
~ 950000
~ 2000000
~ 1700000
que está en línea con lo que esperaría ver
Sin embargo cuando intento de repetir los bucles para cada tipo de datos como este ...
t = DateTime.Now;
for (int index = 0; index < 127; index++)
{
Console.WriteLine(index.ToString());
}
for (int index = 0; index < 127; index++)
{
Console.WriteLine(index.ToString());
}
for (int index = 0; index < 127; index++)
{
Console.WriteLine(index.ToString());
}
a = DateTime.Now.Ticks - t.Ticks;
Los números son más como ...
~ 4500000
~ 3100000
~ 300000
Que me parece desconcertante. ¿Alguien puede ofrecer una explicación?
NOTA: Con el fin de comparar igual por igual me he limitado a los bucles 127 debido a la gama de la tipo byte valor. También esto es un acto de curiosidad no micro-optimización del código de producción.
'byte' tiene el rango de 0-255. No es un tipo de datos firmado. –
Además, la clase 'DateTime' no es adecuada para el perfil de rendimiento de bajo nivel. Use 'System.Diagnostics.Stopwatch'. –
@Aaronaught, Jon: Gracias por la solución. Tengo algunas aclaraciones ... índice <255/127; ... En este código, 255/127 es siempre Byte/Corto/Tipo de datos Int. O.Net IL cambiará su tipo de datos de 255/127 para indexar el tipo de datos para respectivos para los bucles? Podemos declarar constante para el tipo de datos respectivo for-loop y check-it? – Thulasiram