Bir dizinin tüm elemanları üzerinde bir aksiyon gerçekleştirmemiz gerektiğinde, sıklıkla şu üç yoldan birini kullanırız;
Şimdi basit bir örnek ile bu üç yöntemi karşılaştıralım ()*;
( Not : Karşılaştırmalar; Windows7 64bit kurulu, Core2Duo 3.0 GHz ve 4 GB Ram’li bilgisayarımda yapılmıştır. Sadece fikir verme amaçlıdır, farklı durumlarda faklı sonuçlar ile karşılaşılabilir.)*
Öncelikle parametre olarak Generic List (List<T>) alan üç tane method yazalım;
private static long ToplamFor(List<int> Liste) { long Sonuc = 0; int ListeAdet = Liste.Count;
for (int iLoop = 0; iLoop < ListeAdet; iLoop++)
    Sonuc += Liste[iLoop];
return Sonuc; }
private static long ToplamForEach(List<int> Liste) { long Sonuc = 0;
foreach (int Rakam in Liste)
    Sonuc += Rakam;
return Sonuc; }
private static long ToplamForEachExtension(List<int> Liste) { long Sonuc = 0;
Liste.ForEach(Rakam => Sonuc += Rakam);
return Sonuc; }</pre>
Aynı testi 10 defa gerçekleştirip, ortalamasını alacak bir test fonksiyonu yazalım. Yazacağımız fonksiyonu test listesinde olacak eleman adedini parametre olarak alacak;
private static void Testler(int ListeElemanAdet)
{
    List<int> ForSureler = new List<int>();
    List<int> ForEachSureler = new List<int>();
    List<int> ForEachExtensionSureler = new List<int>();
    List<int> TestVerisi = Enumerable.Range(0, ListeElemanAdet).ToList();
    Stopwatch sw = new Stopwatch();
    for (int iLoop = 0; iLoop < 10; iLoop++)
    {
        sw.Restart();
        ToplamFor(TestVerisi);
        sw.Stop();
        ForSureler.Add(sw.ElapsedTicks);
        sw.Restart();
        ToplamForEach(TestVerisi);
        sw.Stop();
        ForEachSureler.Add(sw.ElapsedTicks);
        sw.Restart();
        ToplamForEachExtension(TestVerisi);
        sw.Stop();
        ForEachExtensionSureler.Add(sw.ElapsedTicks);
    }
    Console.WriteLine("For Döngüsü ({0} Eleman) : {1}", ListeElemanAdet, ForSureler.Average());
    Console.WriteLine("ForEach Döngüsü ({0} Eleman) : {1}", ListeElemanAdet, ForEachSureler.Average());
    Console.WriteLine("ForEach Extension ({0} Eleman) : {1}", ListeElemanAdet, ForEachExtensionSureler.Average());
}Artık uygulamamızın test fonksiyonunu kullanacak son kod parçasını yazabiliriz;
public static void Main(string[] args)
{
    Console.WriteLine("Test Başladı");
    Testler(1000);
    Testler(5000);
    Testler(10000);
    Testler(50000);
    Testler(100000);
    Testler(500000);
    Testler(1000000);
    Testler(5000000);
    Testler(10000000);
    Testler(50000000);
    Console.WriteLine("Test Bitti");
    Console.ReadLine();
}
Bakalım yaptığımız testler nasıl sonuç vermiş;

Sonuçlardan aşağıdaki tabloyu çıkarttım;
| **Test Verisi** | **For** | **ForEach** | **ForEach Extension** | 
| *1.000* | 71,1 | 121,5 | 79,7 | 
| *5.000* | 34,3 | 92,2 | 55,6 | 
| *10.000* | 70,0 | 185,1 | 110,4 | 
| *50.000* | 349,3 | 918,4 | 568,3 | 
| *100.000* | 715,2 | 1.902,7 | 1.159,0 | 
| *500.000* | 3.583,3 | 9.379,3 | 5.600,0 | 
| *1.000.000* | 7.260,4 | 18.877,9 | 11.242,8 | 
| *5.000.000* | 37.927,2 | 96.096,9 | 57.845,4 | 
| *10.000.000* | 74.553,5 | 192.621,6 | 115.559,6 | 
| *50.000.000* | 371.698,1 | 956.394,4 | 572.776,7 | 
Senior Software Engineer, @Microsoft
Ada ve Ege'nin babası ;)
Makale Adedi: 484