Asp.Net Cache Ve SQL Cache Dependency
Bu Makalemizde ASP.NET Tarafında Caching İşlemini Ele Alacağız Arkadaşlar.örneğimizde İki Türlü Caching İşlemi Gerçekleştireceğiz,
Bunlardan İlki Nornal Caching Diğeri İse SQL Cache Dependency Olarak Ele Alacağız,Hemen İki Cache İşlemi Arasında’ki Farka Açıklamaya,
Çalışalım İlk Yöntem Bilindiği Üzere ASP.NET Tarafında Cache’lediğimiz DataTable Nesnemizi Bizim Belirlediğimiz Herhangi Bir Kontrol,
İle İlişkilendirmek Olacak Mesala GridView İle, Bu Buğlamda Caclediğimiz DataTable Nesnemiz Üzerinde Belirlediğimiz Dakika Yada Saat,
Olabilir Süresince Verilerimiz Cache’lediğimiz DataTable Nesnemizden Gelecek.Doğru Bir Analizden Sonra Kullanılacak Caching Yöntemi,
Projelerimiz Adına Yararlı Olacaktır.Yalnız Veritabanı Tarafında Yapılacak Herhangi Bir Değişiklik Esnasında Verilerimiz Cache’den,
Geleceği İçin Bazen İstenmeyen Durumlar Söz Konusu Olabilir,Mesela Veritabanın’da Bir Ürünümüzün Fiyatını Artırdığımızı Düşünelim,
Haliyle Verilerimiz Cache’den Geleceği İçin O Anki Client Bilgisayarda Veriler Güncellenmemiş Olarak Gelecek Buda Bazı Durumlar’da,
İstenmeyen Sonuçlar Ortaya Çıkarabilir Bunun Önüne Geçebilmek İçin İkinci Cache’ing Uygulamamıza Göz Atacak Olursak SQL Cache Dependency,
Olayında İse Bu İstenmeyen Durumların Önüne Geçilebilir.Veritabanımızdaki Herhangi Bir Tabloda Olabilecek Her Türlü Değişiklik Anında,
SQL Cache Dependency Sayesinde Client Tarafından Görülebilecek Ve İstenmeyen Sonuçların Önüne Geçebilmiş Olacağız.Dilerseniz Sözü Fazla,
Uzatmadan Örneklerimize Geçelim.İlk Önce SQL Cache Dependency Olayımız Ayarlamak Adına Visual Studio Command Promt Açarak Resimlerdeki İşlemlerimizi Gerçekleştirelim.




Tablo Yapımız Yukarıda Görüldüğü Üzere Veritabanına Yeni Bir Tablo Ve Yeni Store Procedurler Eklenmiş Durumda SQL Cache Dependency,
Çalışacağı Tablo Ve Store Procedurler Otomatik Olarak Eklenmiş Durumda Son Bir İşlem Olarak
Query Editörümüzü Açarak ALTER DATABASE Resimler SET ENABLE_BROKER Aktifleştiriyoruz Yoksa ASP.NET Tarafında Projemiz Çalışma Anında,
ENABLE_BROKER Aktifleştirilmemiş Hatası Verecektir Ve Çalışmayacaktır. Artık ASP.NET Tarafına Geçebiliriz.
Yeni Bir ASP.NET Web Projesi Oluturuyoruz Ve İlk Önce Web.config Ayarlarına Gidiyoruz Ve Aşağıdaki Gibi ConnectionStringimiz Ve Caching Olayımızı Ayarlıyoruz.
<add name=“Silo“connectionString=“Server=.;Database=Resimler;User ID=sa;Password=123456789“providerName=“System.Data.SqlClient” />
</connectionStrings>
<system.web>
<caching>
<sqlCacheDependency enabled=“true“ pollTime=“5000“>
<databases><add name=“Resimler“ connectionStringName=“Silo“/>
</databases>
</sqlCacheDependency>
</caching>
Hemen Akabinde Default.aspx Sayfamızın Tasarım Kısmına Geçiyoruz.Ve Aşağıdaki Gibi Tasarlıyoruz.
Ben Hem Kod İle Yazacağım Hemde SQL DataSource Kullanarak Yazacağım Her İkisini’de Aşağıda Görebilirsiniz,Dilerseniz Kod İle,
Dilerseniz SQL Data Source Kullanarak Kullanabilirsiniz Size Kalmış Arkadaşlar.
<%@ Page Language=”C#” AutoEventWireup=”true” CodeFile=”Default.aspx.cs” Inherits=”_Default” %>
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd“>
<html xmlns=”http://www.w3.org/1999/xhtml“>
<head runat=”server”>
<title>Untitled Page</title>
</head>
<body>
<form id=”form1″ runat=”server”>
<div>
<%–<asp:SqlDataSource ID=”SqlDataSource1″ runat=”server”
EnableCaching=”true” CacheDuration=”5000″
ConnectionString=”<%$ConnectionStrings:Silo %>”
SelectCommand=”SELECT UrunID,UrunAdi,UrunFiyatı,UrunStokMiktari,KategoriID FROM dbo.Urunlerim”
SelectCommandType=”Text” SqlCacheDependency=”Resimler:Urunlerim”>
</asp:SqlDataSource>
<asp:GridView
ID=”GridView1″ runat=”server” DataSourceID=”SqlDataSource1″
AutoGenerateColumns=”false”>
<Columns>
<asp:BoundField DataField=”UrunID” HeaderText=”Ürün No” />
<asp:BoundField DataField=”UrunAdi” HeaderText=”Ürün Adı” />
<asp:BoundField DataField=”UrunFiyatı” HeaderText=”Ürün Fiyatı” DataFormatString=”{0:C}” />
<asp:BoundField DataField=”UrunStokMiktari” HeaderText=”Urun Stok Miktarı” DataFormatString=”{0:} ADET” />
<asp:BoundField DataField=”KategoriID” HeaderText=”KategoriID” />
</Columns>
<HeaderStyle BackColor=”Blue” ForeColor=”White” />
<RowStyle BackColor=”Black” ForeColor=”White” />
</asp:GridView> –%>
<asp:GridView ID=”GridView1″ runat=”server” AutoGenerateColumns=”false”>
<Columns>
<asp:BoundField DataField=”UrunID” HeaderText=”Ürün No” />
<asp:BoundField DataField=”UrunAdi” HeaderText=”Ürün Adı” />
<asp:BoundField DataField=”UrunFiyatı” HeaderText=”Ürün Fiyatı” DataFormatString=”{0:C}” />
<asp:BoundField DataField=”UrunStokMiktari” HeaderText=”Urun Stok Miktarı” DataFormatString=”{0:} ADET” />
<asp:BoundField DataField=”KategoriID” HeaderText=”KategoriID” />
</Columns>
<HeaderStyle BackColor=”Blue” ForeColor=”White” />
<RowStyle BackColor=”Black” ForeColor=”White” />
</asp:GridView>
</div>
<br /><br />
<div>
<asp:Label ID=”lblMessage” runat=”server”></asp:Label><br />
<asp:GridView ID=”GridView2″ runat=”server” AutoGenerateColumns=”false”>
<Columns>
<asp:BoundField DataField=”UrunID” HeaderText=”Ürün No” />
<asp:BoundField DataField=”UrunAdi” HeaderText=”Ürün Adı” />
<asp:BoundField DataField=”UrunFiyatı” HeaderText=”Ürün Fiyatı” DataFormatString=”{0:C}” />
<asp:BoundField DataField=”UrunStokMiktari” HeaderText=”Urun Stok Miktarı” DataFormatString=”{0:} ADET” />
<asp:BoundField DataField=”KategoriID” HeaderText=”KategoriID” />
</Columns>
<HeaderStyle BackColor=”Blue” ForeColor=”White” />
<RowStyle BackColor=”Black” ForeColor=”White” />
</asp:GridView>
</div>
</form>
</body>
</html>
Evet Tasarımımız’da Tamam Olduğuna Göre Artık Kod Tarafına Geçebiliriz.Kodlarımızı’da Aşağıdaki Gibi Yazıyoruz
using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.SqlClient;
using System.Web.Caching;
public partial class _Default : System.Web.UI.Page
{
private static readonly string connectionString = ConfigurationManager.ConnectionStrings["Silo"].ConnectionString;
protected void Page_Load(object sender, EventArgs e)
{
lblMessage.Text = DateTime.Now.ToString();
DataTable dt1 = (DataTable)Cache["Urunlerim"];
DataTable dt = (DataTable)Cache["Urun"];
if (dt == null)
{
dt = DoldurGridView();
}
GridView1.DataSource = dt.DefaultView;
GridView1.DataBind();
if (dt1 == null)
{
dt1 = DoldurGridView2();
}
GridView2.DataSource = dt1.DefaultView;
GridView2.DataBind();
}
protected DataTable DoldurGridView()
{
DataTable dt = new DataTable();
using (SqlConnection cn = new SqlConnection(connectionString))
{
string strSelect = “SELECT UrunID,UrunAdi,UrunFiyatı,UrunStokMiktari,KategoriID FROM dbo.Urunlerim”;
SqlCommand com = new SqlCommand(strSelect, cn);
SqlCacheDependency dep = new SqlCacheDependency(com);
SqlDataAdapter da = new SqlDataAdapter(com);
SqlDependency.Start(connectionString);
DataSet ds = new DataSet();
if (com.Connection.State == ConnectionState.Closed)
com.Connection.Open();
da.Fill(ds);
dt = ds.Tables[0];
Cache.Insert(“Urun”, dt, dep);
cn.Close();
}
return dt;
}
private DataTable DoldurGridView2()
{
DataTable dt = new DataTable();
using (SqlConnection cn = new SqlConnection(connectionString))
{
string strSelect = “SELECT UrunID,UrunAdi,UrunFiyatı,UrunStokMiktari,KategoriID FROM dbo.Urunlerim”;
SqlCommand com = new SqlCommand(strSelect, cn);
SqlDataAdapter da = new SqlDataAdapter(com);
DataSet ds = new DataSet();
cn.Open();
da.Fill(ds);
dt = ds.Tables[0];
Cache.Insert(“Urunlerim”, dt, null, DateTime.Now.AddMinutes(3), Cache.NoSlidingExpiration);
cn.Close();
}
return dt;
}
}
Artık Herşeyimiz Hazır Olduğuna Göre Projemizi Çalıştırıp Sonucu Gözlemleyebiliriz.
Üstteki GridView1 SQL Cahe Dependency İle Cachelenmiş
Alttaki İse Normal Cache Yöntemi İle Aralarındaki Farkı Birazdan Anlayacağız.


İlk Resimde Görüldüğü Üzere Projemiz Çalıştı Her İki GridView’de Cachelenmiş Bir Şekilde Karşımıza Geldi.
Sonraki Resimde Tablomuza Bir Kayıt Girdik Ve Açık Olan İnternet Explorerımızı Tazeledik Gördük İlk GridView1 Yani SQL Cache Dependency Hem Cache’lenmiş,
Hemde Tablomuzda Yaptığımız İnsert Sorgumuz Anında GridView1′e Yansımış Bir Şekilde Karşımıza Geldi
Gelelim İkinci GridView2′imize Oda Cache’lenmiş Bir Şekilde Karşımıza Geldi Fakat Tablodaki Değişiklik Ona Yansıması Neden Çünkü İkinci GridView2′imiz
Cache’lenmiş Durumda Ve Biz Hatırlarsanız Bu Cache İşlemi İçin 2 Dakika Vermiştik İki Dakika Sonra İnternet Explorerımızı Tazelersek Sonuç Aşağıdaki Gibi Olacaktır.
Peki Biz Bu Yaıları Nerelerde Kullanabiliriz Derseniz Online Bir E-Ticaret Sitemiz Olduğunu Düşünürsek Kategorilerimiz Çok Sık Güncellenmiyeceği İçin Normal,
Caching İşlemi Uygulayabiliriz,Çok Değişen Ve Güncellenen Yapılarımız İçin’de SQL Cahe Dependency İşlemini Kullanabiliriz.
Cache İşlemi Çok Faydalı Bir İşlem Olmasına Rağmen Bazı Durumlarda Perfonmansınızı Düşürebilir Cache Kullanılmadan Önce İyi Bir Analiz Yapmak Gerekir Kanaatindeyim.

Dilim Döndüğünce Anlatmaya Çalıştım Umarım Açıklayıcı Ve Faydalı Olmuştur,Böylelikle Bir Makalemizin Daha Sonuna Gelmiş Bulunuyoruz.Sonraki Makalelerde Görüşmek,
Ümidiyle Sağlıcakla Kalın Arkadaşlar.
Giriş
Kategoriler
Arşivler
Takvim
Son YazIlar
- Mevlit Kandiliniz Mübarek Olsun
- Dünyanın en karanlık kahramanı yeniden sürüyor : HAYALET SÜRÜCÜ 2 İNTİKAM ATEŞİ
- Ya Ben İstanbul’u Alacağım, Ya İstanbul Beni ! : FETİH 1453
- Lost’un yaratıcısı J.J. Abrams’tan yeni dizi :ALCATRAZ
- Gurbetçi Rocky’nin komik hikayesi: BERLİN KAPLANI
- Uluslararası Çok Satan Üçlemeden :EJDERHA DÖVMELİ KIZ
- Hoşgeldin 2012
- Geri sayım başlasın ! : YILBAŞI GECESİ
- Plansız.Desteksiz.Seçimsiz :GÖREVİMİZ TEHLİKE 4
- Akıllı ve karizmatik dedektif Sherlock Holmes, en büyük düşmanı Profesör Moriarty’e karşı : Sherlock Holmes: Gölge Oyunları
Son Yorumlar
- Lost’un yaratıcısı J.J. Abrams’tan yeni dizi :ALCATRAZ için Güray
- Aşkın klişelerine karşı alaycı bir tavır takınmak,sizi gerçek aşka karşı kör mü yapar?: ARKADAŞTAN ÖTE için genceaydin
- Windows 7 Kurulum Sorunu (Çözümü) için Güray
- Windows 7 Kurulum Sorunu (Çözümü) için expert_-_man
- Müzik dinlemenin en hızlı ve en kolay yolu myFizy.com için Güray
- 64 bit İşletim Sisteminde 32 bitlik dll ve ocx Dosyalarını .Net’le(Dotnet) import Etme Sorununun Çözümü için Umut Sinan Şirin
- 64 bit İşletim Sisteminde 32 bitlik dll ve ocx Dosyalarını .Net’le(Dotnet) import Etme Sorununun Çözümü için gurultu12
- 64 bit İşletim Sisteminde 32 bitlik dll ve ocx Dosyalarını .Net’le(Dotnet) import Etme Sorununun Çözümü için Umut Sinan Şirin
- 64 bit İşletim Sisteminde 32 bitlik dll ve ocx Dosyalarını .Net’le(Dotnet) import Etme Sorununun Çözümü için gurultu12
- İhanet Noktası (Dan Brown) için pesimist
En Çok Okunanlar
- Eset Nod32 Antivirüs ekrn.exe Sorunu (Çözümü) - 20.895 kere okundu.
- Windows 7 Kurulum Sorunu (Çözümü) - 15.531 kere okundu.
- Skyfire 4.3.2.1_3001 Hatası (Symbian ve Windows Mobile Çözümü) - 13.084 kere okundu.
- Nokia 5800 Temaları - 11.868 kere okundu.
- Golden Retriever - 11.347 kere okundu.
- Kilyos - 9.628 kere okundu.
- Şemsiye Tarihçesi - 8.583 kere okundu.
- “o” an fotoğrafları - 7.273 kere okundu.
- Prag - 6.752 kere okundu.
- Nokia 5800 Programlar 1 - 5.872 kere okundu.
- IPhone 2 Çıktı ve Satışta.. - 5.169 kere okundu.
- Barış Manço - 4.935 kere okundu.
- Sigarayı İlk Kim Keşfetti? - 4.925 kere okundu.
- BİSİKLET - 4.590 kere okundu.
- Windows XP’nin Ölüm Tarihi Uzatıldı - 4.325 kere okundu.
Etiket Bulutu
WP Cumulus Flash tag cloud by Roy Tanck and Luke Morton requires Flash Player 9 or better.


Bu Yazı 1.341 kere okundu.