字典什么时候在Add或ContainsKey上抛出IndexOutOfRangeException?

dri*_*iis 22 .net synchronization dictionary

在一个繁忙的ASP .NET网站上,我有一个Dictionary,它充当缓存,基本上存储键/值对以供以后检索.

在高负载时,Dictionary有时会进入一个状态,每当我调用ContainsKey或Add方法时它总是抛出一个IndexOutOfRangeException.异常发生在私有FindEntry方法中.

我怀疑这可能是由于同步问题,但我不确定.

谁能告诉我在哪种情况下会发生这种情况?我的目标是收集足够的信息,以便我可以在开发环境中重现问题.

Phi*_*oss 21

字典的文档说明:

任何实例成员都不保证是线程安全的.

要允许多个线程访问集合以进行读写,您必须实现自己的同步.

如果您没有同步访问权限Dictionary,那么您可能会遇到类似于您描述的问题(可能是因为内部状态不再有效).如果要在开发环境中尝试重现此操作,请尝试创建一个使用多个线程的程序,以便在Dictionary不同步的情况下连续读取和写入.