2010-10-07 46 views
17

我有一個需要將數據存儲在緩存中的類。 最初我在一個asp.net應用程序中使用它,所以我使用了System.Web.Caching.Cache。dotnet System.Web.Caching.Cache vs System.Runtime.Caching.MemoryCache

現在我需要在Windows服務中使用它。 現在,據我瞭解,我不應該在非asp.net應用程序中使用asp.net緩存,所以我正在研究MemoryCache。

問題是它們不兼容,所以要麼在asp.net應用程序中更改爲使用MemoryCache,要麼我需要創建一個適配器,以確保兩個緩存實現具有相同的接口(可能來自ObjectCache並在內部使用asp.net緩存?)

在asp.net中使用MemoryCache有什麼含義?

Nadav

+3

+1有趣的問題。我看到的最明顯的事情是MemoryCache和ASP.NET Cache將爭奪內存資源。當存在內存壓力時,這可能會轉化爲不同的行爲,因爲每個都有獨立定義的緩存項優先級。 – Joe 2010-10-07 16:53:19

回答

7

我會與你的第二個選項和重構的東西一點點去。我想創建一個接口和兩個供應商(這是你的適配器):

public interface ICachingProvider 
{ 
    void AddItem(string key, object value); 
    object GetItem(string key); 
} 

public AspNetCacheProvider : ICachingProvider 
{ 
    // Adapt System.web.Caching.Cache to match Interface 
} 

public MemoryCacheProvider : ICachingProvider 
{ 
    // Adapt System.Runtime.Caching.MemoryCache to match Interface 
} 
+0

嗨賈斯汀, 這可能是我會做的。 – Nadav 2010-10-11 06:37:25

+3

它只是刺激,在BCL有兩個緩存實現,他們沒有一個共同的接口:( – Nadav 2010-10-11 06:40:07

+5

你認爲通用接口將居住在哪裏?我懷疑微軟不想讓它,你必須包括一些System.Runtime。*。dll作爲使用System.Web.Caching的要求,同樣他們也製作了System.Runtime.Caching,因爲他們不希望人們必須從他們的應用程序引用System.Web。* – Seph 2010-12-16 05:41:10

4

今天早上我碰到一個庫,有這種情況幫助來了。它是一個CacheAdapter,它允許您針對通用接口進行編碼,並通過配置交換緩存機制(System.Web.Caching,System.Runtime.Cache或AppFabric)。

https://bitbucket.org/glav/cacheadapter

+0

是的,我昨天才看到它:) – Nadav 2011-06-02 05:37:36