Etiketler

, , , , ,


Tasarımda Göz Önüne Almanız Gerekenler – Performans Arttırma


Proje tasarımınızı yaparken, performasınızıda düşünmek zorundasınız. Bunun için aşağıdaki bir dizi öneriyi dikkate almanız, projenizin performansını artırma yönünde size fayda sağlayacaktır. Aşağıda ana maddeler olarak listelediğim başlıkları size teker teker aktarayacım.

1. Etkin Kaynak Yönetimi İçin Tasarla
2. Etkili hata yönetimi için tasarla
3. Kodu farklı mantıksal katmanlara ayır.
4. Sınırların kesişmesini en aza indirge
5. Fazla sayıda küçük assembly yerine tek bir büyük assembly tercihinde bulun
6. Thread lere paylaşımlım bir kaynak olarak kullan

İlk olarak kaynak yönetimini (resource management) ele alacağız.



Tasarımı Etkin Kaynak Yönetimi İçin Tasarla



İhtiyaç duymadan objelere yer ayırmaktan ve onlar için kaynak rezerve etmekten kaçının. Sadece kullanacağınız zaman örneğini alın (ilkleyin) ve kullanımınız bittiğinde ayırdığınız kaynağı mutlaka boşaltın. Nesneyi serbest bırakın (realise). .Net ortamında bunun için “dispose” ve “finalize” komutlarını kullanabilirsiniz.


Kaynak kullanımının en hassas yapılması gereken yerler, veri erişim katmanlarıdır. Çünkü alt yapınız sizin tüm operasyonlarınız için temel teşkil eder. Uygulamanız büyüdükçe kullanımı ve önemi artar. Çünkü uygulamanızdaki işlevler hangi bir kaynağa erişmek için ona ihtiyaç duyar. Bu da ara katmalarda herhangi fonksiyonun kullanım sıklığı ile veri erişim katmanında veri tabanına bağlantı açtığınız bir metodun kullanım sıklığı arasında kat ve kat fark olduğunun bir göstergesidir. Bu sebeple bu katmanda yaptığınız en ufak bir tasarım hatası ya da herhangi bir metoda gerçekleştirdiğiniz gereksiz kaynak kullanımı ya da kullandığınız bir kaynağı serbest bırakmanın unutulması çok büyük sorunlara yol açabilir.


Örneğin, veri erişim katmanında açtığınız veri tabanına bağlantı nesnesini (connection) kapatmayı unutursanız, çok basit bir hesapla, günlük 1000 kullanıcı olan bir sitede her kullanıcının 10 sayfa ziyaret ettiğini ve her bir sayfada ortalama 5 veri tabanı bağlantısı açılmasına ihtiyaç duyulduğunu varsayarsak, toplam da 50000 adet kapatılmayan bağlantınız olur. Bunun anlamı bir süre sunucunuz kilitlenecektir.


En başta belirtilen öneriyi tüm kaynak tiplere uygulamalısınız. Veri tabanı bağlantıları (database connections), veri okuyucular (data reader) , dosyalar, tüm okuyucular ve akışlar (streams) , ağ bağlantıları (network connections) ve COM objeleri için özellikle uygulayınız.


.Net ortamında çalışanlar için, IDisposible arayüzünü uygulayan tüm sınıfları using blokları içersinde kullanınız. “Using” blokları nesnenin kullanımı bittikten sonra, kaynağın kapatıldığını ve serbest bırakıldığını garanti eder. Diğer tüm nesneler için “Finally” bloklarını kullanabilirsiniz. Bu blok içersinde nesnelerin kaynak kullanımını “dispose” ya da “finalize” ederek kendiniz yönetmelisiniz. Bu operasyonu sizin yerinize GC (Garbage Collector) da gerçekleştirecektir fakat GC nin ilgili nesneyi bırakması sizin kontrolünüzde olamayacak bir şeydir. Kritik operasyonlarda bu işlemi kendiniz kontrol ediniz.