【问题标题】:What threadsafe inmemory c# collection to use?在内存 c# 集合中使用什么线程安全?
【发布时间】:2019-09-15 15:23:31
【问题描述】:

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

【问题讨论】:

    标签: c# oop


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      如果您需要一次更新整个数据结构(例如,生产者将始终在一次扫描中更新数据,而在此更新期间不允许消费者读取),无论如何您都需要某种锁定。在这种情况下,您可以使用普通的 DictionarylockReaderWriterLockSlim(如果您有多个消费者)

      【讨论】:

        猜你喜欢
        • 2014-02-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-10
        • 1970-01-01
        • 1970-01-01
        • 2011-02-28
        相关资源
        最近更新 更多