Почему инициализация встроенного массива настолько медленнее, чем это происходит итеративно? Я выполнил эту программу, чтобы сравнить их, и одиночная инициализация занимает много раз дольше, чем при цикле for
.
Здесь программа, которую я написал в LinqPad
, чтобы проверить это.
var iterations = 100000000;
var length = 4;
{
var timer = System.Diagnostics.Stopwatch.StartNew();
for(int i = 0; i < iterations; i++){
var arr = new int[] { 1, 2, 3, 4 };
}
timer.Stop();
"Array- Single Init".Dump();
timer.Elapsed.Dump();
}
{
var timer = System.Diagnostics.Stopwatch.StartNew();
for(int i = 0; i < iterations; i++){
var arr = new int[length];
for(int j = 0; j < length; j++){
arr[j] = j;
}
}
timer.Stop();
"Array- Iterative".Dump();
timer.Elapsed.Dump();
}
Результаты:
Array - Single Init
00:00:26.9590931
Array - Iterative
00:00:02.0345341
Я также использовал это на VS2013 Community Edition и последнем просмотре VS2015 на другом ПК и получил аналогичные результаты для моих LinqPad
результатов.
Я запустил код в режиме Release
(т.е.: оптимизация компилятора) и получил очень разные результаты сверху. На этот раз два кода были очень похожи. Это, по-видимому, указывает на проблему оптимизации компилятора.
Array - Single Init
00:00:00.5511516
Array - Iterative
00:00:00.5882975