25
Tem
2009

Asp.Net Cache Ve SQL Cache Dependency

Author    Category .NET, Bilgisayar, Genel     Tags , ,     Okunma Sayısı Bu Yazı 1.341 kere okundu.

 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.

  Dependency_1

Dependency_2
Sql_Tablo_1
Sql_Tablo_2

 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.

 

 

web.config_2 

<connectionStrings>

<add name=SiloconnectionString=Server=.;Database=Resimler;User ID=sa;Password=123456789providerName=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.
 

Cache_1 Sql_Tablo_3

 Cache_2
 İ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.

 

 Cache_3
 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.

 

 

Blog Widget by LinkWithin

Yorum Yapın

Yazıya yorum yapmak için lütfen Giriş yapınız.

Giriş

Facebook

Kategoriler

Arşivler

Takvim

Şubat 2012
Pts Sal Çar Per Cum Cts Paz
« Oca    
 12345
6789101112
13141516171819
20212223242526
272829  

Son YazIlar

Son Yorumlar

En Çok Okunanlar

Etiket Bulutu

Anket

Mobil İşletim Sistemi olarak hangisini tercih ediyorsunuz?

Sonuçları göster

Loading ... Loading ...

Kimler Çevrimiçi

Şuanda 14 ziyaretçi çevrimiçi
2 ziyaretçi, 12 robot, 0 üye
Yapımcısı Ziyaretçi Haritası

Reklam AlanI