Çok kapsamlı bir tarih araştırması/tablo birleştirmeleri/vb. Yapan küçük bir ASP.NET MVC 2 sitesini bir araya getirdim.SQL Önbelleğe Alma ve Varlık Çerçevesi
MVC'yi kullanarak, verileri birçok farklı biçimde (tablolar, resimler, vb.) Veren bir denetleyicim var. Ben OutputCacheAttribute
VaryByParam = "*"
ile kullandığınız eylem özdeş parametreler için
- : veritabanını isabet kaydetmek için sıkça bir ikili önbellek mekanizmaya sahip.
- Eylemle ilgili bazı parametrelerin değiştiğini varsayarak (veya başka bir eylem denir), "verilerim" daha önce istenmiş olabilir, bu nedenle verileri veritabanının ilk isabından sonra bir görünüm modelinde saklıyorum. Bunu bir .NET 4.0
System.Runtime.Caching.ObjectCache
ile başardım. KontrolörünObjectCache
içinin
Örnek:
private static readonly ObjectCache cache =
new MemoryCache("CompareControllerCache");
private static void CacheObject(ViewModel obj,
string param1,
int someOtherParam)
{
string key = string.Format("{0}-{1}", param1, someOtherParam);
Trace.WriteLine(string.Format("Adding {0} to the cache", key));
cache.Add(key, obj, new CacheItemPolicy
{
SlidingExpiration = TimeSpan.FromMinutes(1)
});
}
// Corresponding GetCachedObject with similar key defining logic.
Bu bana iyi bir performans artışı sağlar, ancak nerede başarısız çok basit olmasına CacheItemPolicy
üzerindedir. İdeal olarak, önbellek penceresinin daha büyük olmasını isterim ancak veritabanı değiştiğinde önbelleğe alınan öğenin süresinin dolmasını istiyorum.
CacheItemPolicy
, SqlChangeMonitor
ekleyebildiğim ChangeMonitors
koleksiyonuyla bunu destekliyor gibi görünüyor, ancak bunu oluşturmaya çalışırken bu noktaya geliyorum.
Bir SQL veritabanına erişmek için Entity Framework 4 kullanıyorum, SqlChangeMonitor
nasıl bir önbelleği tetikleme olasılığı olan veritabanı veritabanlarının çiftini izlemek için nasıl yapıyorum? nasıl benim veritabanı Varlık Framework'ün kapsülleme üzerine mandalı -
SqlChangeMonitor
bir SqlCommand
götüren bir SqlDependency
ile inşa edilmiştir?
Oldukça iyi bir soru bulunabilir. Bunun mümkün olduğunu düşünmüyorum ama bekleyip görelim. – jfar