简而言之,.Net 生态系统中存在哪些简单的内存缓存?
我正在寻找的是:
- 无配置(除了简单的 API 调用)。我不想弄乱外部配置文件,因为它们只会使部署复杂化。
- 同一进程(不是某些外部进程或服务器)。最好像创建一样容易
var myCache = new SimpleCache(1024 * 1024 * 100); // 100 MB
- 指定的内存限制
- 根据最少使用量从缓存中清除的项目
- 基于时间的过期(不是必需的,但在其他场景中可能有用)
- 适用于 .Net 3.5
我已经研究过这些选项:
- ASP.Net System.Web.Caching
- 它的 API 不支持对缓存大小进行任何形式的控制,也不支持基于使用的优先级。因此,当它决定有足够的内存压力来清空缓存时,您将完全受其支配。
- 系统.运行时.缓存
- 不是一个选项,因为这是在 .Net 4.0 中添加的,并且这篇文章似乎表明它的性能很差:System.runtime.caching 的性能
- Microsoft 企业库 - 缓存块
- 除了拥有重量级的声誉外,我不喜欢使用 XML 文件或 app.config 进行配置。此外,虽然它支持根据存储的对象的数量来限制缓存的大小,但它没有限制这些对象的大小的机制。
- NCache
- 对于我想要的用例来说可能有点矫枉过正,但最重要的是,它是一种付费产品,我不想处理(与我只在一两天内写一个相比)。像往常一样,它的速成版有使用限制,不鼓励将其用于任何生产目的。
- 内存缓存D
- 与我想要的完全相反(外部分布式进程)
我正在使用 Google Protocol Buffers (protobuf-net),所以我确实对每个项目的内存占用量有一个相对准确的估计。我正在缓存从数据库访问返回的数据,但我不想使用正式的 ORM(我实际上正在使用 PetaPoco,但这不是重点)。
在这个阶段,我计划实现我自己的缓存,使用双链表和散列(字典)在达到缓存限制后从缓存中删除最近最少使用的项目。但是,在我推出自己的选项之前,我想看看是否有人知道任何合适的选项。