В этой статье мы обсудили анализ производительности for loop
и foreach
. Какой из них дает лучшую производительность - for
или foreach
?Анализ эффективности для цикла и foreach
Вот два простых метода:
public static void TestFor()
{
Stopwatch stopwatch = Stopwatch.StartNew();
int[] myInterger = new int[1];
int total = 0;
for (int i = 0; i < myInterger.Length; i++)
{
total += myInterger[i];
}
stopwatch.Stop();
Console.WriteLine("for loop Time Elapsed={0}", stopwatch.Elapsed);
}
public static void TestForeach()
{
Stopwatch stopwatchForeach = Stopwatch.StartNew();
int[] myInterger1 = new int[1];
int totall = 0;
foreach (int i in myInterger1)
{
totall += i;
}
stopwatchForeach.Stop();
Console.WriteLine("foreach loop Time Elapsed={0}", stopwatchForeach.Elapsed);
}
Тогда я побежал код выше результат был Еогеасп Время цикла Прошедшее = 00: 00: 00,0000003, цикл Время, прошедшее с начала = 00: 00: 00,0001462. Я думаю, нам нужен высокопроизводительный код. Мы использовали бы foreach
В цикле for вы должны хранить 'myInteger.Length' вне оператора' for' для лучшей производительности. В противном случае ему придется запрашивать длину массива для каждой итерации. – ryan
Вы вызывали 'GC.Collect' между вызовами' TestFor' и 'TestForeach'? Я думаю, что первый тест может повлиять на результаты второго из-за сбора мусора. – user20140268
Любой тест производительности, который не запускается, счетчик итераций, который позволяет измерять время до нескольких секунд, если не минуты, является подозрительным. Тебя просто слишком много, возможно, путают, что может добавить несколько ложных десятых долей секунды, полагая, что любой тест производительности работает менее чем на 5 секунд в целом. –