Cache kelimesini hepimiz duymuşuzdur özellikle işlemci ve ram ile ilgili konularda kısaca çalışma mantığını anlatalım bilgisayarımızda cache bellek bizim en çok yaptığımız işlemleri üzerinde hazır olarak barındıran hafıza birimleridir. Veri iletimi çok hızlıdır.
Bildiğimiz gibi asp.net server tarafında çalışan bir web programlama dilidir yani sayfanızda yapılan en ufak bir değişiklikte sayanın postback olması ve verinin servera gidip tekrar geri dönmesi gerekir. Bu işlem elbetteki çok kullanıcı sistemlerde server tarafında büyük sıkıntıya yol açacaktır. Bu sıkıntıların en çok yaşandığı kısım elbetteki veriye erişim aşamasında meydana gelir. Sürekli olarak veriye daha hızlı ulaşabilmek için yeni teknolojiler üretilmiştir seralize, pooling, xmlhttp ajax ve cache gibi biz ise bugun asp.net ile cache teknolojisini inceleyeceğiz.
Öncelikle yeni bir web sitesi açıyoruz bir ve basit bir örnekle işe başlıyoruz. Örneğimizde bir xml dosyasından veriyi çekip cache imize yukleyeceğiz daha sonra ise gridviewe yukleyeceğiz ve trace ile sayfamızı izleyerek iki farklı yöntem arasındaki hızlı farkını göreceğiz.
İlk olarak solution explorer dan bir xml dosyası ekliyoruz (xml eklememizin boyutunun küçük olması) formumuza da bir datagridview ekliyoruz.
Diyelimki aşağıdaki gibi müzik listenizin olduğu bir xml dosyanız var. Ve bu listeye şarkı eklendiğinde çıkartıldığında ilk açılışta xml den okuyacak fakat daha sonra bellekten okumasını sağlayacağız.

Sayfamızın kod kısmına geçiyoruz ve
if (!IsPostBack) //sayfa ilk defa çalıştırılıyorsa
{
DataSet ds;
ds = ((DataSet)(Cache["Muzikler"]));
if (ds==null)//xml i okuyacaığımız dataset boş ise xml den yukle
{
string path = Server.MapPath(“~/muzikler.xml”);
ds = new DataSet();
ds.ReadXml(path);
CacheDependency cd = new CacheDependency(path);
Cache.Insert(“Muzikler”, ds, cd);
Trace.Warn(“xml dosyasından den okundu”);
}
else //datasetimiz şu anda dolu ve else bloğu çalışacak
{
Trace.Warn(“cache den okundu”);
}
GridView1.DataSource = ds;
GridView1.DataBind();
Projeyi bu şekilde çalıştırdığınızda süre bilgisini göremeyeceksiniz sadece verilerin datagridview e eklendiğini göreceksiniz fakat bu kadar az bir veride hızı farketmeniz mümkündeğil o yüzden trace ile izlediğimiz duruma bakmak için sayfamızın kaynak kodunda aşağıdaki değişikliği yapıyoruz. Tracemode ise 2 versiyonu mevcut bunu yazarsak işlem süremizi üst kısımda görebiliriz.
<%@ Page Language=”C#” AutoEventWireup=”true” CodeFile=”Default.aspx.cs” Inherits=”_Default” Trace=”true” TraceMode=”SortByCategory” %>
Şimdi kodları açıklayalım :
Öncelikle Cache e insert metodu ile itemlerimizi nasıl ekleriz?
Insert metodu 5 adet parametre ile aşırı yuklenmiş versiyonları mevcuttur. Biz anlattığımız durumu ele alalım xml den veri okuyorsunuz ve bu veriyi cache atmak istiyorsunuz. Cache.Insert(“Muzikler”, ds, cd);
- Parametre olan dosya bizim xml dosyamızın ana kok dizini olacak 2. Parametre olan dataset ise datasetin read xml metodu ile xml dosyamızı okuyup yukleyeceğimiz veri kaynağımız, 3. Parametre olan Cache Dependency ise bizim xml kaynağımız güncel olabilir yani silme ve ekleme gibi durumlarda bizim cachemiz ona göre kendini tekrar hafızaya yuklemesini sağlar. Bunlara ek olarak diğer parametreler ise cacheleme süresi gibi özellikleri barındırır aşağıdaki kullanım cachelediğimiz bilginin hafızada ne kadar tutulacağını gösterir.
Cache süreleri
Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));
Response.Cache.SetCacheability(HttpCacheability.Public);
Response.Cache.SetValidUntilExpires(true);
Bunlara ek olarak eğer siz elle silmek isterseniz Cache.Remove(“dosya”) diyerek hafızadan direk silebilirsiniz.
Şimdi projemizi çalıştırdığımızda aşağıdaki gibi bir görüntü oluşacaktır.

Cache e yuklemeden 756;
Cache e yuklemeden 19; yaklasık 40 kat bir hız sağladı
