(Hintergrund: Why should I use int instead of a byte or short in C#)int, kurz, Byte-Leistung in Back-to-Back-for-Schleifen
Zu meiner eigenen Neugier über die Vor-und Nachteile der Verwendung der "angemessene Größe" integer vs der "optimiert" erfüllen Integer Ich habe den folgenden Code geschrieben, der das bestätigte, was ich vorher über die int-Leistung in .Net (und was im obigen Link erklärt wurde) wahr ist, nämlich dass es für die int-Leistung optimiert ist und nicht für kurz oder 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());
Dies ergibt etwa konsistente Ergebnisse im Bereich der ...
~ 950000
~ 2000000
~ 1700000
, die in Einklang mit was ich erwarten würde zu sehen.
aber wenn ich versuche, die Schleifen für jeden Datentyp wie folgt zu wiederholen ...
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;
Die Zahlen sind eher wie ...
~ 4500000
~ 3100000
~ 300000
Was ich rätselhaft finde. Kann jemand eine Erklärung anbieten?
HINWEIS: Im Interesse des Vergleichs wie für wie ich habe die Schleifen auf 127 wegen des Bereichs der Byte Werttyp begrenzt. Auch dies ist ein Akt Neugier nicht Produktionscode Mikro-Optimierung.
'Byte' hat den Bereich von 0-255. Es ist kein signierter Datentyp. –
Die Klasse "DateTime" eignet sich auch nicht für Profilerstellung auf niedriger Ebene. Verwenden Sie 'System.Diagnostics.Stopwatch'. –
@Aaronaught, Jon: Danke für die Lösung. Ich habe einige Klarstellungen ... index <255/127; ... In diesem Code ist 255/127 immer Byte/Short/Int Datentyp Oder .Net IL ändert seinen Datentyp von 255/127 in den Index Datentyp für entsprechende für Schleifen? Wir können eine Konstante für den entsprechenden Datentyp for-loop und check-it deklarieren? – Thulasiram