Stavo cercando di capire se un ciclo for era più veloce di un ciclo foreach e stavo usando le classi System.Diagnostics per cronometrare il compito. Durante il test ho notato che quale loop mai inserito prima esegue sempre più lentamente l'ultimo. Qualcuno può dirmi perché questo sta accadendo? Il mio codice è qui sotto:Perché il secondo ciclo for esegue sempre più velocemente del primo?
using System;
using System.Diagnostics;
namespace cool {
class Program {
static void Main(string[] args) {
int[] x = new int[] { 3, 6, 9, 12 };
int[] y = new int[] { 3, 6, 9, 12 };
DateTime startTime = DateTime.Now;
for (int i = 0; i < 4; i++) {
Console.WriteLine(x[i]);
}
TimeSpan elapsedTime = DateTime.Now - startTime;
DateTime startTime2 = DateTime.Now;
foreach (var item in y) {
Console.WriteLine(item);
}
TimeSpan elapsedTime2 = DateTime.Now - startTime2;
Console.WriteLine("\nSummary");
Console.WriteLine("--------------------------\n");
Console.WriteLine("for:\t{0}\nforeach:\t{1}", elapsedTime, elapsedTime2);
Console.ReadKey();
}
}
}
Ecco l'output:
for: 00:00:00.0175781
foreach: 00:00:00.0009766
Solo una breve nota: Quando sono i tempi qualcosa per determinare i tempi di esecuzione relativi, no uscita nulla (WriteLine()) all'interno del ciclo. Il tempo necessario per scrivere WriteLine() è probabilmente migliaia (a milioni) di volte più lungo di quello che si sta tentando di testare in modo da perdere ogni senso di accuratezza. Inoltre, avrai bisogno di più di quattro (4) iterazioni per essere significativo. Prova migliaia (o anche milioni). –
C'è solo una risposta reale alla tua domanda: il tuo benchmark è seriamente imperfetto. Altri punti che le persone citano sono vere, ma non è questo il motivo per cui ottieni questo risultato. –
Che cosa dice se esegui prima il ciclo foreach? –