(background: Почему я должен использовать int вместо байта или short в С#)
Чтобы удовлетворить мое любопытство в отношении плюсов и минусов использования целого числа "соответствующего размера" и "оптимизированного" целого числа, я написал следующий код, который усилил то, что я ранее считал истинным в отношении производительности int в .Net(и который объясняется в ссылке выше), которая заключается в том, что она оптимизирована для производительности int, а не короткой или байтовой.
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());
Это дает примерно согласованные результаты в области...
~ 950000
~ 2000000
~ 1700000
Это соответствует тому, что я ожидаю увидеть.
Однако, когда я пытаюсь повторить петли для каждого типа данных, как это...
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;
Цифры больше похожи...
~ 4500000
~ 3100000
~ 300000
Что я нахожу загадочным. Может кто-нибудь предложить объяснение?
Примечание: В интересах сравнения, как, например, я ограничил цикл до 127 из-за диапазона типа байта. Также это акт любопытства, а не производственная кодовая микро-оптимизация.