Abdullah Tarık Güney tarafından yazıldı
Merhabalar, bu ikinci makalemizde ise
sizler ile beraber kaldığımız yerden devam ediyoruz. İlk başta anlattığımız ama
örnek vermediğimiz Fragment cahcing ile devam edelim. Kısaca özetlemek
gerekirse bu cachleme yöntemi parça parça cachleme olarakta türkçe bir karşılık
getirebiliriz. Bu yöntemde amaç sayfamızın belli bölümlerini önbellekleme
yapmak ve böylece istediğimiz doğrultuda performans artışına gitmektir.
Unutmadan söylemek gerekki burada ki ince nokta user controls ( kullanıcı
kontrolleri ) kullanmak. Tabi ki bu yöntemi uygulama sırasından tek user
controls kullanılacak diye bir olay aynı şekilde subsitution kontrolunu
kullanarak ta yapabiliriz. Bu özetlerden sonra konumuza başlayalım. Önceki
makalemizde Directive bölümüne cachleme işlemi yapmak için hangi directive leri
yazdığımızı görmüştük şimdi bunlardan yola çıkarak çok basit ve anlaşılır
örnekler ile konumuzu inceleyelim.(Unutmadan eğer user controls hakkında
bilginiz yoksa bu makaleyi okumada önce ilk başta user controls konusunu
incelemenizi şiddetle tavsiye ederim.) 1.) İlk başta
Toplama isimli bir user control ü projenize ekleyiniz ve aşağıdaki tasarimi
yapınız 2.) Bu tasarımı yaptıktan sonra Kullanıcı
Kontrolümüzde Source (kaynak) kısmına gelip şu direktivi ekleyelim sayfamızın
üst kısmına <%@ OutputCache
Duration="5"
VaryByParam="None"
%> 2.) Yukarıda dikkatinizi çeken kısımlardan biri duration yani cache
mizin kullanılma süresinini 5 saniye yaptık. 3.) Şimdi bu oluşturduğumuz Kullanıcı Kontrolunün Toplama isimli tuşun
olay yordamına şunu yazın ; protected void btnToplama_Click(object
sender, EventArgs e) { lblSonuc.Text = (Convert.ToInt16(txtSayi1.Text) + Convert.ToInt16(txtSayi2.Text)).ToString();
} Evet bunları yaptıktan sonra artık iki
sayıyı toplayan ve sonucunu bize veren bir kullanıcı kontolümüz olmuş oldu.
Şimdi ise yapmamı gereken olay bunu Default.aspx sayfamıza eklemek. Ekledikten
sonra cachlemeyi daha iyi farkedebilmek amacıyla Default.aspx sayfamıza bır
tane label ekleyin ve Page_Load olayına şu kodları yazın : protected
void Page_Load(object
sender, EventArgs e) { Label1.Text = DateTime.Now.ToLongTimeString();
} Evet artık sistemimiz çalışmaya hazırdır ve şimdi
derleyiniz. Evet açılan sayfamızda bulunan Kullanıcı Kontrolümüzde sayıları
girip Toplama tuşuna basınız. Neler gördünüz ? Tabiki herhangi bişey değişmedi
ama Default.aspx sayfasına eklediğiniz Label baktığımzda ise her sayfayı
yenilemede değiştiğini göreceksiniz ve 5 saniye sonra ise Kullanıcı Kontrolümüz
değişir. Burada önemli noktalardan biri ise Cache in kullanımı sırasında
Kullanıcı Kontrolu için yazılan Code-Behind (Toplama.ascx.cs) deki kodun
derlenmeyeceğidir. İşte sizde Fragment önbelleklemenin ne kadar kolay olduğunu
gördünüz. Peki ben Default.aspx sayfasına koyduğum Label1 kontrolunun
içeriğinin Herhangi bir kontrole göre değişmesini isteseydim yani,
Default.aspx sayfamda yeni bir cache oluşturulmasını tetikleyici etkenin benim
belirlediğim kontrolümün olmasını isteseydim bunu nasıl yapardım ? Bunun için
tek yapmanız gereken olay şu : Default.aspx sayfasına bır tane örnek olması amacıyla
DropDownList ekleyiniz. Ve EnableAutoPostBack özelliğini true yaptıktan sonra
3-4 tane içine item ekleyiniz yada direk aşağıda bulunan kodu Default.aspx
sayfanızın Source kısmına ekleyiniz : <asp:DropDownList ID="DropDownList1"
runat="server"
AutoPostBack="True"> <asp:ListItem>Visual C#.NET</asp:ListItem> <asp:ListItem>ASP.NET</asp:ListItem> <asp:ListItem>CSharpnedir.com</asp:ListItem>
</asp:DropDownList> Şimdi bunu ekledikten sonra Default.aspx
sayfamızda Directive bölümüne şunu eklemeniz gerekecek : <%@ OutputCache
Duration="5"
VaryByControl="DropDownList1"
%> Evet şimdi burada önemli olan nokta VaryByControl
( Kontrole göre değiştir ) özelliği. Burada amacımız DropDownList1 kontrolünün
değişimine göre önbellekleme yapmak. ( Tabiki hala önceden eklediğimiz ve
güncel zamanı gösteren Label1 kontrolümüz duruyor olması gerekir.) ve sayfamızı
derleyelim. İlk başta sayfamızı yenileyelim bakalım zamanı gösteren label
kontrolünde herhangi bir değişim oluyo mu? Dikkat ettiyseniz her 5 dakikada bir
değişim olduğunu göreceksiniz ve şimdide eklemiş olduğumuz DropDownList1
kontrolümüzün seçili olan indexini değiştirin. Ne oldu ? Tabiki sayfamız
önbellekleme zamanının bitmesini beklemeden yeniden bir önbelleği oluşturuldu
ve güncel sayfa önümüze geldi. İşte bu şekilde herhani bir kontrole göre de
nasıl önbellekleme yapabileceğimizi görmüş olduk. Bu arada değinmeden geçmek istemediğim
bölümlerden birisi ise Önceki örneğimizde Kullanıcı Kontrolleri ile çalışırken
şöyle bir ifadeninde Kullanıcı Kontrollerinde önbellekle yapma sırasında
gözükebileceği : <%@ OutputCache
Duration="5"
Shared="true"
%> Peki buradaki Shared özelliği ne işimize
yarıyor. İlka başta adından da anlaşılacağı gibi paylaşılmış manasına gelen bu
özellik : aynı kullanıcı kontrolünü birden fazla yerde kullanabilirsiniz ve her
farklı sayfa için asp.net bu kullanıcı kontrolünün farklı bir önbelleklenmiş
kontrolünü oluşturur. Ama eğer biz böyle bir gereksinime ihtiyaç duymuyorsak ve
her sayfa için aynı önbelleklenmiş kullanıcı kontrolünü kullanmak istiyorsak o
zaman Share özelliğini true yapmamız sorunumuzu giderecektir. A.tarık güney Bilgisayar mühendisi Bu arad data cahcing anlatmadım ki o bayağı
ileri bir konu onunla alakalı isterseniz video hazırlamam daha iyi olcağını
düşünüyorum çünkü veritabani işin işine girdiği yerler var görerek öğrenmek
daha etkili olur kanaatindeyim.. Teşekkürler.. İyi çalışmalar..