【问题标题】:dotnet System.Web.Caching.Cache vs System.Runtime.Caching.MemoryCachedotnet System.Web.Caching.Cache 与 System.Runtime.Caching.MemoryCache
【发布时间】:2011-04-22 09:59:06
【问题描述】:

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

现在我需要在 Windows 服务中使用它。 现在,据我了解,我不应该在非 asp.net 应用程序中使用 asp.net 缓存,所以我正在研究 MemoryCache。

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

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

纳达夫

【问题讨论】:

  • +1 个有趣的问题。我看到的最明显的事情是 MemoryCache 和 ASP.NET Cache 将争夺内存资源。当存在内存压力时,这可能会转化为不同的行为,因为每个行为都有独立定义的缓存项优先级。

标签: .net asp.net caching


【解决方案1】:

我会选择您的第二个选项并稍微重构一下。我会创建一个接口和两个提供者(它们是你的适配器):

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
}

【讨论】:

  • 嗨贾斯汀,这可能就是我要做的。
  • 令人恼火的是,BCL 中有两个缓存实现,而且它们没有通用接口 :(
  • 您认为通用接口会存在于哪里?我怀疑微软不想让你必须包含一些 System.Runtime.*.dll 作为使用 System.Web.Caching 的要求,同样他们制作 System.Runtime.Caching 因为他们不希望人们这样做必须从他们的应用程序中引用 System.Web.*。
  • 嗯,接口并不是什么大不了的东西,你不能把它放在一个基本的 dll 中。现在,如果你想在客户端缓存数据,你什么都没有(System.Runtime.Cache 在服务器配置文件中)。
【解决方案2】:

今天早上我遇到了一个可以帮助解决这种情况的图书馆。它是一个 CacheAdapter,允许您针对通用接口编写代码并通过配置替换缓存机制(System.Web.Caching、System.Runtime.Cache 或 AppFabric)。

https://bitbucket.org/glav/cacheadapter

【讨论】:

  • 是的,我昨天才看到 :)
猜你喜欢
  • 1970-01-01
  • 2011-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-06
  • 2021-12-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多