(sfondo: Why should I use int instead of a byte or short in C#)int, a breve, le prestazioni di byte in back-to-back for-loop
per soddisfare la mia curiosità circa i pro ei contro di utilizzare l'intero "dimensione appropriata" contro il "ottimizzato" intero ho scritto il seguente codice che ha rafforzato ciò che in precedenza ritenevo vero per le prestazioni int in .Net (e che è spiegato nel link sopra) che è che è ottimizzato per le performance int piuttosto che short 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());
Questo dà risultati più o meno consistenti nel settore della ...
~ 950000
~ 2000000
~ 1700000
che è in linea con quello che mi aspetterei di vedere.
Tuttavia quando provo a ripetere i cicli per ogni tipo di dati come questo ...
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;
i numeri sono più come ...
~ 4500000
~ 3100000
~ 300000
Che trovo sconcertante. Qualcuno può offrire una spiegazione?
NOTA: Nell'interesse del confronto come per come ho limitato i loop a 127 a causa della gamma del byte di tipo valore. Anche questo è un atto di curiosità non di micro-ottimizzazione del codice di produzione.
'byte' ha la gamma di 0-255. Non è un tipo di dati firmato. –
Inoltre, la classe 'DateTime' non è adatta per il profiling delle prestazioni di basso livello. Usa 'System.Diagnostics.Stopwatch'. –
@'Aaronaught, Jon: Grazie per la soluzione. Ho alcuni chiarimenti ... indice <255/127; ... In questo codice, 255/127 è sempre il tipo di dati Byte/Short/Int. O.Net IL cambierà il suo tipo di dati di 255/127 per indicizzare il tipo di dati per rispettivi cicli? Possiamo dichiarare la costante per il rispettivo tipo di dati for-loop e check-it? – Thulasiram