【发布时间】:2019-09-15 15:23:31
【问题描述】:
我有一个要求,我想通过一个类在内存中保存一个键和一个对象(总共大约 10 个值),并且我希望能够在大约每 30 秒内更新这个集合 然后能够在内存集合中使用它来进行其他类的计算。最初我决定使用 IDistributed Cache,但后来我的一位同事建议使用某种内存线程安全集合,因为如果我长时间不更新这些值,就有可能清除缓存。这里有什么建议吗?
【问题讨论】:
我有一个要求,我想通过一个类在内存中保存一个键和一个对象(总共大约 10 个值),并且我希望能够在大约每 30 秒内更新这个集合 然后能够在内存集合中使用它来进行其他类的计算。最初我决定使用 IDistributed Cache,但后来我的一位同事建议使用某种内存线程安全集合,因为如果我长时间不更新这些值,就有可能清除缓存。这里有什么建议吗?
【问题讨论】:
我会为此使用 ConcurrentDictionary,它是线程安全的。
表示可由多个线程同时访问的键/值对的线程安全集合。
https://docs.microsoft.com/en-us/dotnet/api/system.collections.concurrent.concurrentdictionary-2
正如您所说,缓存可以随时清除。 使用字典也是一种缓存,但您不必处理过期之类的事情。
【讨论】:
如果您希望能够随时更改键和/或值并且您的值彼此独立有效,则可以使用ConcurrentDictionary。
如果您需要一次更新整个数据结构(例如,生产者将始终在一次扫描中更新数据,而在此更新期间不允许消费者读取),无论如何您都需要某种锁定。在这种情况下,您可以使用普通的 Dictionary 和 lock 或 ReaderWriterLockSlim(如果您有多个消费者)
【讨论】: