到期并发字典

NPe*_*son 8 c#

嗨,我在一个带有过期功能的并发字典后做了一些研究.

我们有一个对象列表,可以通过添加和从许多不同的线程中删除来访问.我们还希望项目的到期时间为60秒.(如果我们能够监听一个事件,告诉我们哪些项目已经过期并从列表中删除,那将是很好的).

我们还需要像字典一样快速查找.

该列表将持续数千个对象.

所以它就像ConcurrentDictionary但具有过期功能.

MemoryCache可以做什么吗?

还是他们要看的其他东西?

spe*_*der 9

MemoryCache 看起来很理想,尤其是

这种类型是线程安全的.

  • 这个类的构造函数的文档中的"Caution"语句确实让我停下来.很长一段时间,建议使用全局变量,并且对应用程序生命周期的模糊不清.它以一个谜语开头:"除非需要,否则不要创建MemoryCache实例." 嗯......这似乎不像我正在寻找的轻量级"ConcurrentDictionary过期条目".对别人的经历感兴趣.(参考https://msdn.microsoft.com/en-us/library/system.runtime.caching.memorycache.memorycache.aspx) (4认同)

Ale*_*lex 5

免责声明:我是下面提到的 OSS 包的贡献者之一!

其缺点MemoryCache是:

  • 不通用(导致对原始类型的键和值进行装箱/拆箱)
  • 带有膨胀(操作系统性能计数器、启发式和黑魔法来决定何时在“内存压力”下驱逐未过期的项目等)
  • 仅使用字符串键(每次搜索时分配)
  • 扫描按键时很快耗尽内存

这些就是我们编写FastCache 的确切原因,写入速度提高了 10 倍,读取速度提高了 6 倍,等等。基本上就是这样 - 一个即将到期的ConcurrentDictionary.