SqlCacheDependency nesnesi ASP.NET uygulamalarında veritabanındaki güncellemelere göre önbellekleme yapılmasını sağlayan nesnedir. Zamana bağımlı kalmadan çok daha hızlı ve performans açısından önemli kazançlar sağlayan bu nesneyi tek bir tablodan gelen kayıtların önbelleklenmesi için kullanabiliyoruz. Fakat çoğu uygulamada JOIN'li ifadelerle birden fazla tablonun verilerini eşleştirebiliyoruz. Peki böyle bir durumda önbellekleme işlemini SqlCacheDependency nesnesi ile nasıl gerçekleştirebileceğiz? Çünkü yapısı itibariyle bu nesne tek tablo ile çalışabilir şekilde tasarlanmıştır. Sorumuzun cevabı: AggregateCacheDependency nesnesi(Yanılmıyorsam .NET Framework 2.0 ile gelen bir tiptir). AggregateCacheDependency nesnesi birden fazla CacheDependency nesnesini içerisinde saklayarak, herhangi bir nesnenin durumunun değişmesinde Cache nesnesinin bellekteki bilgilerini kaldıracak ve önbellekleme işlemini başarılı şekilde yapabilmemizi sağlayacaktır. Yapmamız gereken tek işlem herbir tablo için oluşturduğumuz SqlCacheDependency nesnelerini AggregateCacheDependency nesnesine Add metodu ile eklemek ve bu nesneyi Cache'e Insert metodu aracılığıyla eklemektir. Aşağıdaki kod parçalarında bu işlemin nasıl yapılabileceğini görebilirsiniz.
SqlCacheDependency dep2 = new SqlCacheDependency("dbCon", "Siparisler");
SqlCacheDependency dep3 = new SqlCacheDependency("dbCon", "Musteriller");
AggregateCacheDependency aggDep = new AggregateCacheDependency();
aggDep.Add(dep1,dep2,dep3);
Cache.Insert("urunSiparis", dt, aggDep);
SqlCacheDependency ASP.NET uygulamalarında çok verimli şekilde önbellekleme işlemleri yapılmasını sağlar. Ancak hangi şekilde olursa olsun, önbellekleme işlemlerinde unutulmaması gereken nokta, çok büyük verileri Cache'te saklayacak olursak ve sistem kaynakları yeterli değilse bazı durumlarda OutOfMemoryException hatası alabiliriz. Yani hem hataların oluşması, hem de bellekte çok fazla yer işgal etmek uygulamanın performansı adına kötü pratikler olacaktır(bkz: Kaş yapalım derken göz çıkarmak). Bu nedenle Cache'te saklanacak verilerin boyutu bizim için önemli bir kriterdir, bu ayrıntıyı unutmamak lazım.
Bu arada yeri gelmişken ASP.NET uygulamalarında performans ipuçlarına ihtiyacınız varsa, bu Cuma akşamı gerçekleşecek olan webinerime katılımlarınızı beklerim. Bilgileri bu adresten bulabilirsiniz.