|
Unutmayayım diye yazdıklarım... |
C#'da Operator'lerin Performansı02.01.2010 tarihinde oğuzhan tarafından yazıldı.Yine opensource bir uygulamanın kodlarını incelerken bazı yerleri refactor ettiğimde daha hızlı çalıştığını gördüm. Revize ettiğim yerlerde genelde operator'lerin kullanımı ile alakalıydı. Böyle bir kaç gereksiz ve performans düşürücü kod ile karşılaşınca da operatör performans'ı ile ilgli birşeyler yazmaya kadar verdim ;)Sık sık kullandığım ve kullanmaya dikkat ettiğim karar verici operatörlerin kullanım yerleri ve karşılaştırmalarını basit olarak gösteren giriş seviyesi bir yazı oldu. C# Condition'lar Condition'dan kastımız if, switch, :?, ?? gibi operatörlerin yerine göre kullanı mı, karar verme mekanizmalarınızın hızlı olmasını sağlayacaktır. Örnek vermek gerekirse aşağıdaki gibi string karşılaştırması yapacaksanız switch kullanmanız en performanslı sonucu almanızı sağlayacaktır. static void switchCondition(string hayvan) { switch (hayvan) { case "At": break; case "Öküz": break; case "Eşşek": break; case "Kedi": break; case "Köpek": break; case "Ejderha": break; default: break; } } Bu kodun aynısını if blok'u ile de yapmanız mümkün fakat her ne olursa olsun switch bu durumda çok daha hızlı çalışacaktır. Gel gelelim switch'inde kötü performans verdiği yerler var. Aşağıdaki if kullanımı da switch'den daha performanslı çalışacaktır. static bool IfOrCondition(string hayvan) { return (hayvan == "At" || hayvan == "Öküz" || hayvan == "Eşşek" || hayvan == "Kedi" || hayvan == "Köpek" || hayvan == "Ejderha"); } Bu kodun birde switch karşılığını elealırsak aşağıdaki gibi yapı çıkıyor. Burda da if daha hızlı karar veriyor. static bool switchOrCondition(string hayvan) { switch (hayvan) { case "At": case "Öküz": case "Eşşek": case "Kedi": case "Köpek": case "Ejderha": return true; default: return false; } } Bire bir değer karşılatırırken de == (Eşittir) operatörü yerine Equals metodunu kullanmanız performansınızı hızlandıracak bir harekettir. Bunu ufak bir test programı yazarak karşılaştırdım ve aşağıdaki gibi bir sonuç çıktı. static void EqualsCondition(string hayvan) { if (hayvan.Equals("At")) { } else if (hayvan.Equals("Öküz")) { } else if (hayvan.Equals("Eşşek")) { } else if (hayvan.Equals("Kedi")) { } else if (hayvan.Equals("Köpek")) { } else if (hayvan.Equals("Ejderha")) { } } == : 9,7233 ms Equals : 0,8875 ms Özellikle string karşılaştırırken Equals kullanmanız performans açısından yararınıza olacaktır. Bazı durumlarda da ne if, nede switch kullanmanız gerekmez, Diğer dillerde olduğu gibi C#'da da Inline kullanılabilecek operatörler vardır ve gerektiğinde kullanılırsa hem kodunuz daha kolay okunur hemde performans kazanırsınız. If kullanarak uzun uzun oluşturduğunuz bu kod bloğunu. static bool IfConditional(string hayvan) { if (hayvan.Equals("Ejderha")) return true; else return false; } Inline bir conditional operatör kullanarak aşağıdaki şekilde az kod ile ve daha hızlı çalışır vaziyete getirebilirsiniz. static bool Conditional(string hayvan) { return hayvan.Equals("Ejderha") ? true : false; } Bu iki kod arasındaki karşılaştırma sonucunda da aşağıdaki gibi bir sonuç çıktı. If : 0,9262ms :? : 0,4659ms Inline kullanabileceğimiz diğer bir operatörde ?? operatörü'dür. Herhangi bir nesnenin null olup olmadığını kontrol eder eğer null ise belirleyeceğiniz değeri nesnenin değerine atar. Bu operatörü yine if ile karşılşatırırsak aşağıdaki gibi bir If kullanımını. static string IfAssigmentOp(string hayvan) { if (hayvan == null) return "Ejderha"; else return hayvan; } ?? operatörü kullanarak refactor edebiliriz. static string AssigmentOp(string hayvan) { return hayvan ?? "Ejderha"; } Tahmin edeceğiniz gibi bu kod'da if bloğu kullanarak oluşturulmuş kod'dan hızlı ve kısa'dır. #ekimdusu-, 27.03.2010 18:30:41 tarihinde demiş ki... çok kaliteli bir makale olmuş yürekten kutlarım,#haydar-, 12.05.2010 23:47:36 tarihinde demiş ki... == : 9,7233 ms#Nazmi Altun+, 04.08.2010 00:43:52 tarihinde demiş ki... Güzel çalışma. |
En çok ilgi görenler... HP IPAQ 914c Rastgele birşeyler... Yeni çıkan Windows R... Şebeke WHT, Fıroİş, Denizİş, Serkan, Semih, Sewgi, Beşir, İzgençvos, Erkan, Mumin, Aliİş, Lütfü, Alper, Yusuf |
|
2003 - Oğuzhan YILMAZ Web Hosting Sponsor Vargonen Technologiies |