For Döngüsünü mü Foreach Döngüsünü mü Tercih Etmeliyim?

For mu Foreach mi tercih edilmeli?. C# for ve foreach döngüsü arasındaki farklar neler? Temelde aynı işleveri görüyor. Bir yazılımcı kodlama yaparken hedefe odaklanmakla birlikte performansı da düşünmek durumundadır. Bu yazıda for ve foreach kullanımı ve performans değerlendirmesi yapmaya çalışacağım.

For Döngüsü

“For” döngüsü belirli bir koşul doğru oluncaya kadar tekrar eden döngü işlemidir. Koşul sağlandığı sürece blok içerisindeki işlemler tekrar eder.

for (int i= 0; i<100; i++) 
{ 
    //Döngüdeki şart kadar tekrar eden kodlarımız burada 
}

Bir dizi oluşturup bu dizinin içeriğini doldurabiliriz.

int[] sayilar = new int[100];

Random rnd = new Random();

for (int i= 0; i< sayilar.Length; i++)  
{  
    sayilar[i]=  rnd.Next(0,1000);
}  

Foreach Döngüsü

"Foreach" döngüsü, var koleksiyonlardaki öğeler arasında tekrar eden döngü işlemidir.

foreach(var item in sayilar)  
{  
    //Koleksiyonlardaki kadar tekrar eden kodlarımız burada                
}

Foreach ile for gibi dizi elemanlarını erişebilirsiniz. Ancak foreach ile koleksiyon öğesine atama yapamazsınız. Çünkü foreach döngüsü koleksiyonun bir kopyasını oluşturup o kopya üzerinden döngüsünü sağlıyor. Yani bizim yukarıda tanımladığımız sayilar dizisini kopyalayıp, kopyaladığı dizi üzerinden döngüsünü tamamlıyor.

foreach(var item in sayilar)  
{  
    item= rnd.Next(0,1000);             
}

Bu şekilde bir kod yazarsanız geçici bir değişkene atama yapamazsınız gibi bir hata alırsınız.

Sonuç

For ile foreach mantığını anladık sanırım. Kısaca özetlemek gerekirse for mevcut dizi üzerinde döngü kurarken foreach bir kopya oluşturup döngüyü kopya üzerinden çalıştırmaktadır.

Peki, biz hangisini kullanmalıyız? Bahsi geçen dönülerin çalışma yöntemlerinden de anlaşılacağı üzere for ve foreach arasında performans farkı vardır. Performans için for döngüsü tercih edilmelidir. Ancak, temiz ve okunabilir bir kod için foreach daha kullanışlı görünüyor. Projenizin durumuna göre tercih sizindir.

Performans Testi

Bir uygulama ile performans farklarını göstermek istedim. Bunun için 10.000 adet integer değer tutan bir diziye performans testi uyguladım. Uygulama kodları ve sonuç raporu aşağıdaki gibidir.

        static void Main(string[] args)
        {
            //10.000 değer alabilecek int tipinde dizi
            int[] sayilar = new int[10000];

            Random rnd = new Random(); 

            //Random değerler ile diziyi dolduralım
            for (int i = 0; i < sayilar.Length; i++)
            {
                sayilar[i] = rnd.Next(0, 10000);
            }

            //Çalışma süresini hesaplamak için Stopwatch sınıfından yararlanıyoruz.
            Stopwatch watch = new Stopwatch();
            watch.Start();
            for (int i = 0; i < sayilar.Length; i++)
            {
               int s= sayilar[i];
            }
            watch.Stop();
            Console.WriteLine($"For döngüsü okuma süresi : {watch.Elapsed.TotalMilliseconds} milisaniye");


           //çalışma süresini birde foreach için hesaplatalım
            watch.Start();
            foreach (var item in sayilar)
            {
                int s = item;
            }
            watch.Stop();
            Console.WriteLine($"Foreach döngüsü okuma süresi : {watch.Elapsed.TotalMilliseconds} milisaniye");
        }

Görüldüğü üzere for daha performanslı ve stabil görünüyor. Testlerdeki süre farklılığı bilgisayarın konfigürasyonuna, o an işlemcinin meşguliyetine göre farklılık göstermektedir. Grafikten görüldüğü gibi bundan en çok etkilenen foreach'tır.

Visual Studio Çevrimdışı (Offline) Kurmak? İso Dosyası Oluşturmak Önceki Yazı

Visual Studio Çevrimdışı (Offline) Kurmak? İso Dosyası Oluşturmak

GoDaddy'de Plesk Panel Üzerinde Ücretsiz SSL Sertifikası Kurulumu Nasıl Yapılır? Sonraki Yazı

GoDaddy'de Plesk Panel Üzerinde Ücretsiz SSL Sertifikası Kurulumu Nasıl Yapılır?

Yorum/Soru Yazın