System.Runtime.Caching.MemoryCache的通用实现
本文关键字:实现 MemoryCache Runtime Caching System | 更新日期: 2023-09-27 18:37:07
MemoryCache是否有任何通用的替代方案/实现?
我知道 MemoryCache 在后台使用哈希表,所以只需要过渡到使用 Dictionary<,>,这是 Hashtable 的通用版本。
这将提供类型安全性并提供性能优势,因为没有装箱/拆箱。
编辑:我感兴趣的另一件事是拥有不同的密钥类型。默认值为 System.String。
MemoryCache是否有任何通用的替代方案/实现?
不在基类库中。 你必须自己滚动,尽管我个人只会围绕提供你想要的API的MemoryCache
做一个包装器。
这将提供类型安全性并提供性能优势,因为没有装箱/拆箱
类型安全可以在包装类中相当容易地处理。 装箱/取消装箱只有在存储值类型(而不是类)时才是一个问题,即使这样,也可能是最小的,因为您不太可能经常从缓存中推送和拉取,以至于这是一个真正的性能问题。
至于类型安全性和可用性,我实际上已经编写了自己的方法来将MemoryCache
项的调用包装在一个泛型方法中,从 API 的角度来看,这允许更好的使用。 这非常简单 - 通常只需要以下方法:
public T GetItem<T>(string key) where T : class
{
return memoryCache[key] as T;
}
同样,您可以创建一个以相同方式设置值的方法。
编辑:我感兴趣的另一件事是拥有不同的密钥类型。默认值为 System.String。
这在MemoryCache
中不直接支持,因此需要相当多的工作来生成自己的密钥。 一种选择是制作一个类型安全包装器,该包装器还提供了基于您的值生成字符串键的Func<T, string>
- 这将允许您为任何类型的T
生成缓存条目。 但是,您必须小心,将所需的字符串中的所有数据作为比较的一部分包含在字符串中。
我写了我的FWIW:
https://github.com/ysharplanguage/GenericMemoryCache#readme(链接失效)
这里有一个原始代码的分支:
https://github.com/caesay/GenericMemoryCache
我正在研究一种更快的MemoryCache替代方案,称为FastCache
支持键和值的泛型,查找速度几乎就像Dictionary
,即比MemoryCache
快7-10倍
附言免责声明:我是项目的维护者。