Alıntı (canalpay):
>Dediğim gibi ilk hangi fonksiyon çağrıldığı bile çok farkediyor hız ölçümünde. Hatta bazen biri hızlı olup diğeri yavaş oluyor. Bazen ise tam zıttı.
Hiç şaşırmadım... ;) Bunlar baştan tahmin edilmesi çok zor konulardır. Hatta daha yeni bir makale okudum: programa hız testi kodu eklenmesi, programı hızlandırıyordu. :)
Bu testlerin üçünü aynı programda yapmak yerine, teker teker yapmanı öneririm. Mikro işlemcinin ara belleğine sığıp sığmama gibi bir konu bile bir fonksiyonu diğerinden kat kat yavaş göşterebilir.
Dürüst olayım: bir fonksiyonun bir test programında daha hızlı olduğu ispatlansa bile, yine de gerçek programlar içindeki performansıyla aynı sonucu vermeyebilir.
Testlerin yapıldığı zamanda bilgisayarın başka hangi işlerle meşgul olduğu da performansı etkiler.
Eğer tutarlı olarak bir performans kazancı gösterilirse tamam. Ayrıca, bu sonuçlar üçünün de aynı hızda olduğunu göstermiyor mu:
Alıntı (canalpay):
>birinci : 3578
ikinci : 3422
üçüncü : 3500
Ben bütün bildiklerime dayanarak, deney hataları nedeniyle farklı gibi görünen ama hızları aynı olan üç fonksiyon görüyorum.
Alıntı:
>Ama switch yapısı itabarı ile ifden ayrılıyor. Bunu siz benden daha iyi biliyorsunuz. Switch bir anahtar kelime alır. Case ile anahtar terimi ne olduğunu kontrol eder ona göre işlem yaparsınız. SAdece bunun için tasarlandığı için hem daha hızlı olur. Hem de kod daha okunaklı olur. İflerde ise bir anahtar dan fazla alır. Bu yüzden daha yavaş çalışır. Böyle olmasa bile ben böyle biliyorum.
Doğru biliyorsun ama derleyicinin görevini azımsıyorsun. Derleyici, hız kazancı gördüğü için bizim if'imizi de arka planda switch olarak gerçekleştirebilir. Bu, antika derleyicilerin bile yıllardır bildikleri bir numaradır.
Alıntı:
>Bu arada kodu tek kontrol ile yazıyorum. Bunun için switch yada if gerekmeyecek. Ama hata yapıyorum. Şuna bir bakarmısınız ?
> (büyükHarf == 'I') ? küçükHarf = 'ı' : küçükHarf = toUniLower(büyükHarf);
> ```
>
Şöyle olur herhalde:
küçükHarf = (büyükHarf == 'I') ? 'ı' : toUniLower(büyükHarf);
Bu kodun da bir karşılaştırma yaptığı açık herhalde? Nasıl olur da aynı işi yaptığı halde daha hızlı olabilir? ;)
Ek olarak, kullandığın deneme dizgisinde, yapılan işle ilgili her karakter de bulunmuyor. Örneğin ı yok...
Yine ek olarak, derleyiciyi -O seçeneğini kullanarak mı, kullanmadan mı çalıştırdın? Sonuçlar ona göre de farklılık gösterebilir.
Bunların hiçbirisini switch'e karşı olduğum için söylemiyorum. Hatta bence de burada switch daha uygun duruyor. Ama son derece önemli ve son derece yanıltıcı olan bir konuyu açtığın için bildiklerimi söylüyorum.
Ali
--
[ Bu gönderi, <http://ddili.org/forum>'dan dönüştürülmüştür. ]