使用什么线程安全内存c#集合?

时间:2019-09-15 07:05:46

标签: c# oop

我有一个要求,我想通过一个类将键和对象保存在内存中(总共约10个值),并且我希望能够每30秒更新一次此集合 然后可以在内存集合中使用它来进行其他类的计算。最初,我决定使用IDistributed Cache,但后来我的一位同事建议使用某种内存线程安全的集合,因为如果我长时间不更新值,则可能会清除缓存。这里有什么建议吗?

2 个答案:

答案 0 :(得分:1)

我将为此使用ConcurrentDictionary,因为它是线程安全的。

  

表示键/值对的线程安全集合,可以同时由多个线程访问。

https://docs.microsoft.com/en-us/dotnet/api/system.collections.concurrent.concurrentdictionary-2

正如您所说,缓存可以随时清除。 使用字典也是一种缓存,但是您不必处理到期和类似的事情。

答案 1 :(得分:0)

如果您希望能够随时更改键和/或值并且您的值彼此独立有效,则可以使用ConcurrentDictionary

如果您需要一次更新整个数据结构(例如,生产者将始终在一次扫描中更新数据,并且不允许消费者在此更新期间读取数据),那么无论如何您都将需要某种锁定。在这种情况下,您可以将常规Dictionarywith cte ( select ROW_NUMBER() over(order by sal desc)rnum ,name,sal from emp ) select * from cte where rnum = 2 ReaderWriterLockSlim配合使用(如果您有多个使用者)

相关问题