dotnet System.Web.Caching.Cache vs System.Runtime.Caching.MemoryCache

Nad*_*av 18 .net asp.net caching

我有一个类需要将数据存储在缓存中.最初我在asp.net应用程序中使用它,所以我使用了System.Web.Caching.Cache.

现在我需要在Windows服务中使用它.现在,据我所知,我不应该在非asp.net应用程序中使用asp.net缓存,所以我正在调查MemoryCache.

问题是它们不兼容,所以要么改为在asp.net应用程序中使用MemoryCache,要么我需要创建一个适配器,以确保两个缓存实现具有相同的接口(可能派生自ObjectCache并使用内部的asp.net缓存?)

在asp.net中使用MemoryCache有什么含义?

Nadav

Jus*_*ner 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
}
Run Code Online (Sandbox Code Playgroud)

  • 你认为Common Interface会在哪里生活?我怀疑微软不想让你必须包含一些System.Runtime.*.dll作为使用System.Web.Caching的要求,同样他们也制作了System.Runtime.Caching,因为他们不希望别人必须从他们的应用程序引用System.Web.*. (5认同)
  • 它只是激怒BCL中有两个缓存实现,它们没有共同的接口:( (3认同)
  • 好吧,一个接口并不是一件大事,你不能把它放在一个基本的dll中.现在,如果要在客户端缓存数据,则没有任何内容(System.Runtime.Cache位于服务器配置文件中). (2认同)