我可以迭代.net 4内存缓存
本文关键字:内存 缓存 net 迭代 我可以 | 更新日期: 2023-09-27 18:13:41
我正在使用System.Runtime.Caching.MemoryCache
提供的缓存。
我想枚举缓存的项目,以便我可以使项目无效(退出然后重新加载),如
foreach (var item in MemoryCache.Default) { item.invalidate() }
但是这里找到的官方文档显示:
!重要:检索MemoryCache实例的枚举数是一个资源密集和阻塞操作。因此,枚举数应该
肯定有一个简单而有效的方法来迭代缓存的项目吗?
到目前为止提出的建议都很好,但我的需求仍然是:遍历缓存的项。这似乎是一个非常简单的任务,而且我希望缓存内部具有某种列表结构。MemoryCache
的文档和特性集是需要的。
如果放置在缓存中的项数不变,则这是一个合理的解决方案。如果数目确实改变了,那么您需要通过适配器类插入/删除,以便使列表与实际的缓存保持同步。虽然有点乱,但它可以工作,并且避免了文档中提到的性能惩罚。
希望MemoryCache
缓存提供程序将在下一个平台版本中充实。
考虑使用changemonitor,它允许您在满足某些条件时自动退出过时的条目。
参见在System.Runtime.Caching中是否存在某种CacheDependency ?
这类似于System.Web.Caching CacheDependencys,它允许您在文件或其他缓存项更改时退出条目。
2014年
这是获取所有项目的正确方法:
Dim AllItems = MemoryCache.Default.Select(Of ItemType)(Function(O) O.Value)