2010-10-07 44 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