简而言之,.Net生态系统中存在哪些简单的内存缓存?我正在寻找以下内容:
- 无需配置(除了简单的API调用)。我不想使用外部配置文件,因为它们只会使部署变得复杂。 - 同一进程(不是某个外部进程或服务器)。最好像这样创建:
我已经研究了以下选项:
在这个阶段,我计划实现自己的缓存,使用双向链表和哈希(字典)来提供一旦达到缓存限制就能够删除最近最少使用的缓存项。然而,在我自己实现之前,我想检查是否有任何适合的选项。
- 无需配置(除了简单的API调用)。我不想使用外部配置文件,因为它们只会使部署变得复杂。 - 同一进程(不是某个外部进程或服务器)。最好像这样创建:
var myCache = new SimpleCache(1024 * 1024 * 100); // 100 MB
- 指定内存限制
- 基于最少使用而清除缓存项
- 基于时间过期(非必需,但在其他场景中可能有用)
- 与.Net 3.5兼容我已经研究了以下选项:
- ASP.Net System.Web.Caching
- 它的API不支持对缓存大小的任何控制,也不支持基于使用情况的优先级。因此,当它决定有足够的内存压力来清空缓存时,您完全取决于它。
- System.Runtime.Caching
- 这不是一个选择,因为它是在.NET 4.0中添加的,并且这篇文章似乎表明它的性能很差:Performance of system.runtime.caching
- Microsoft Enterprise Library - Caching Block
- 除了声称臃肿之外,我不喜欢使用XML文件或app.config进行配置。此外,虽然它支持基于存储的对象数量限制缓存的大小,但它没有限制这些对象大小的机制。
- NCache
- 可能对我想要的用例过度,但最重要的是,它是一款付费产品,这不是我想要处理的事情(相比之下,我只需在一两天内编写一个)。通常,其Express版本具有使用限制,不鼓励将其用于任何生产目的。
- MemCacheD
- 与我想要的完全相反(外部分布式进程)
在这个阶段,我计划实现自己的缓存,使用双向链表和哈希(字典)来提供一旦达到缓存限制就能够删除最近最少使用的缓存项。然而,在我自己实现之前,我想检查是否有任何适合的选项。