您應該引用HttpRuntime.Cache
對象。我爲此創建了一個包裝,類似於您在問題中引用的內容。隨意使用它:
using System.Web.Caching;
public class CachingService
{
protected Cache Cache
{
get;
set;
}
public int CacheDurationMinutes
{
get;
set;
}
public CachingService()
{
Cache = HttpRuntime.Cache;
CacheDurationMinutes = 60;
}
public virtual object Get(string keyname)
{
return Cache[keyname];
}
public virtual T Get<T>(string keyname)
{
T item = (T)Cache[keyname];
return item;
}
public virtual void Insert(string keyname, object item)
{
Cache.Insert(keyname, item, null, DateTime.UtcNow.AddMinutes(CacheDurationMinutes), Cache.NoSlidingExpiration);
}
public virtual void Insert(string keyname, object item, CacheDependency dependency)
{
Cache.Insert(keyname, item, dependency);
}
public virtual void Remove(string keyname)
{
Cache.Remove(keyname);
}
}
這是一個示例用例。功能LoadPosts
應該加載博客文章以顯示在網站上。該功能將首先看看帖子被緩存起來,如果沒有它會加載從數據庫中的職位,然後緩存起來:
public IEnumerable<BlogPost> LoadPosts()
{
var cacheService = new CachingService();
var blogPosts = cacheService.Get<IEnumerable<BlogPost>>("BlogPosts");
if (blogPosts == null)
{
blogPosts = postManager.LoadPostsFromDatabase();
cacheService.Insert("BlogPosts", blogPosts);
}
return blogPosts;
}
第一次遇到這種功能運行時,高速緩存將返回null
,因爲我們沒有向BlogPosts鍵添加任何內容。第二次調用函數時,帖子將在緩存中,並且if
塊中的代碼將不會運行,從而爲我們節省了訪問數據庫的空間。
謝謝Clonked。如果可能的話,你能舉個例子說明如何使用你的班級嗎?我是C#的新手。謝謝。 – 2011-01-30 06:29:37