我可以迭代.net 4内存缓存

本文关键字:内存 缓存 net 迭代 我可以 | 更新日期: 2023-09-27 18:13:41

我正在使用System.Runtime.Caching.MemoryCache提供的缓存。

我想枚举缓存的项目,以便我可以使项目无效(退出然后重新加载),如

foreach (var item in MemoryCache.Default) { item.invalidate() }

但是这里找到的官方文档显示:

!重要:检索MemoryCache实例的枚举数是一个资源密集和阻塞操作。因此,枚举数应该

肯定有一个简单而有效的方法来迭代缓存的项目吗?

我可以迭代.net 4内存缓存

到目前为止提出的建议都很好,但我的需求仍然是:遍历缓存的项。这似乎是一个非常简单的任务,而且我希望缓存内部具有某种列表结构。MemoryCache的文档和特性集是需要的。

因此,如上所述,我在缓存适配器类中添加了一个列表,该列表包含对我放置在缓存中的每个项的引用。如果我需要遍历缓存——不仅仅是为了无效,而是为了收集统计信息等等——那么我就遍历列表。

如果放置在缓存中的项数不变,则这是一个合理的解决方案。如果数目确实改变了,那么您需要通过适配器类插入/删除,以便使列表与实际的缓存保持同步。虽然有点乱,但它可以工作,并且避免了文档中提到的性能惩罚。

希望MemoryCache缓存提供程序将在下一个平台版本中充实。

考虑使用changemonitor,它允许您在满足某些条件时自动退出过时的条目。

参见在System.Runtime.Caching中是否存在某种CacheDependency ?

这类似于System.Web.Caching CacheDependencys,它允许您在文件或其他缓存项更改时退出条目。

2014年

这是获取所有项目的正确方法:

Dim AllItems = MemoryCache.Default.Select(Of ItemType)(Function(O) O.Value)