Makale Özeti

ASP .NET ile üç ön bellekleme modeli ile karşı karşıyayız.

Makale

ÖN BELLEKLEME(CACHING)

ASP .NET ile üç ön bellekleme modeli ile karşı karşıyayız. Sayfa seviyesinde, kullanıcı kontrolü seviyesinde ve Cache API. Sayfa ve kontrol seviyesindeki ön bellekleme küçük uygulamalar ve ufak bazlı birçok kullanımda büyük avantaj sağlar. Cache API ise büyük kullanılabilirlik sağlar. Uygulamaların her katmanında kullanımı ön bellekleme adına büyük avantajlar sağlar.
Uygulamaların veri katmanına, iş ve kullanıcı arayüz katmanlarına caching’i ekleyerek hafızayı çok yormaz hale getirebilirsiniz. Oluşan arşiv sonrasında da performans adına büyük kazançlar sağlarsınız. Uygulamaların hızlarını arttırdığı için kullanıcıların zamanlarının verimli kullanılmasını da sağlarsınız.
Sayfa bazlı ön bellekleme ile sayfa çağrıldığında sadece HTML çıktısı döndürür. Sayfa ön belleklemesi için;
<%OutputCache Duration=”60” VaryByParam=”*” %>
En basit hali ile bu şekilde tanımlayabilirsiniz.
Parametreleri;
Duration : Zorunlu alandır. Sayfanın kaç saniye olarak yazılan değerde ön bellekleneceği belirtilir. Pozitif tam sayı değer yazılabilir.
Location: İsteğe bağlı yazılır. Sayfanın nerede ön belleklerinin tutulacağı belirtilir. Alacağı değerler; Any, Client, Downstream, None, Server veya ServerAndClient.
VaryByParam: Zorunlu alandır. Sayfanın hangi alana göre ön bellekleneceği belirlenir. * ifadesi ile tüm alanlar için ön bellekle denilir. Eğer özel kriterler verecekseniz ; ile ayırarak yazabilirsiniz.

Kısmi ÖnBellekleme
Sayfadaki kontrollere özel ön bellekleme yapmak isterseniz bu ön bellekleme sistemini kullanabilirsiniz. Kullanımı;
<%OutputCache Duration=”60” VaryByParam=”none” VaryByControl=”lstListe” %> 60 saniyeliğine lstListe isimli kontrolü ön belleklemiş oluyoruz. Aynı isimli kontrolü tüm sayfalarda ön belleklemek istersek shared özelliğini true yapmak yeterlidir.

Cache Object
Output ön belleklemenin kullanımı kolay ve performansı artırıcı bir yöntemdir. Ancak gerçek performansı ve kolaylığı ASP.NET’in Cache objesini kullanarak gerçekleştirebilirsiniz. Ön belleklenmiş bilgiye erişim, ön bellekleği bir olay sonucunda yeniden başlatmak gibi özel uygulamalarda gerçekleştirebilirsiniz.
Cache objesine System.Web sınıfının ya da Page objesinin Cache özelliği kullanarak referans verebilirsiniz. Veya UserControl sınıfının UserControl’deki cache özelliğini kullanarak önbelleklenmiş bilgiye erişebilirsiniz. Bu bir kontroldeki önbelleklenmiş bilgiye direk ulaşmada çok yararlıdır.
Dependency ve Expiration

Önbelleklediğiniz bilginin belirli şartlarda önbellekden silinmesini istediğiniz zaman bu şartları belirleyebilirsiniz. Bu şartları tanımladığınızda olay gerçekleştiği anda önbelleklenmiş bilgi bellekten silinecektir. Bu şartlar;
File Dependency(Dosya Bağımlı):
Herhangi bir dosya değiştiği zaman önbellekdeki bilginin silinmesi sağlanabilir.
Key Dependency(Nesne Bağımlı):
Diğer önbelleklenmiş herhangi bir bilginin değişmesi sonucunda istediğimiz önbellek bilgisinin silinmesi sağlanabilir.
Time Base Expiration(Zamana Bağımlı):
Önbelleklenmiş bilginin belli zaman sonra sonlanması sağlanabilir.

CallBacks(Geri Çağırma)
Önbelleklenmiş bilginin önbellekden silinmesi halinde otomatik callbaks metodu kullanılabilir. Bu durumda otomatik olarak tekrar önbellekleme yapılabilir.
Önbelleklenmiş Verilere Öncelik Vermek
Çok fazla önbellekleme sonucunda hafıza kaynakları performans açısından zayıf kalabilir. Bu durumda hafızayı güvenilir çalışma seviyelerine geri döndürmek için otomatik olarak önbelleklenmiş olan bilgileri silmeye başlar. Bu işleme scavenging denir. Silme işlemini önbelleklenmiş bilgilerin öncelik sırasına göre yapar. Bu yüzden önbelleğin priority(öncelik) özelliğini kullanmak faydalıdır. Bunun anlamıda önbelleklediğimiz bilgileri öncelik sırasını belirtirsek bu önceliklere göre silme işlemi gerçekleştirilecektir.
Önbellekleme de dikkat edilmesi gereken bir nokta var. Evet önbellek performansı çok arttırıcı bir özelliktir ancak buda gerekli gereksiz her durumda önbelleğe baş vurmak anlamına gelmez. Sonuçta önbellekleme işleminde önbelleklenen bilgilerde sunucunda durmaktadır. Bu sebeple fazla kullanıldığında zarar getirebilir. Dikkatli kullanılması gerekmektedir.

Örnek uygulamalar;
En basit hali ile bir sayfayı 30 saniyeliğine önbelleklemek istersek;
<% OutputCache Duration = “30” VaryByParam=”*” %>
Dosya bağımlı önbellekleme yapmak istersek;
CacheDependency cacheOrnek = New CacheDependency(Server.MapPath(“ornek.txt”))
Cache.Insert (“CachedItem”, oge, cacheOrnek)
Zamana bağımlı önbellekleme yapmak için CacheInsert satırına zamanı parametre olarak geçirmek yeterlidir.
Cache.Insert(“CachedItem”, oge, null, DateTime.Now.AddSeconds,CacheNoSlidingExpiration)

Yeliz Korkmaz
yeliz.korkmaz@bilisimanadolu.com