.net NET 4中的模糊索引异常

.net NET 4中的模糊索引异常,.net,multithreading,exception,.net,Multithreading,Exception,我有一个IndexOutOfRangeException,根据抛出异常的堆栈跟踪,我无法在调试模式下重现,它发生在返回true的行上;在这一行上没有数组索引,甚至在抛出异常的过程中也没有数组索引。所以我猜堆栈跟踪可能有点误导 有人知道这种行为的原因吗?我确实有多个线程访问抛出异常的对象,但它们只读取对象,没有进行任何修改。这可能还是个问题吗 任何关于我应该从何处着手解决此问题的建议都将不胜感激。您可能希望在迭代之前创建本地副本,或者在迭代之前找到锁定集合的方法 通常情况下,在调试器中显示引发异常

我有一个IndexOutOfRangeException,根据抛出异常的堆栈跟踪,我无法在调试模式下重现,它发生在返回true的行上;在这一行上没有数组索引,甚至在抛出异常的过程中也没有数组索引。所以我猜堆栈跟踪可能有点误导

有人知道这种行为的原因吗?我确实有多个线程访问抛出异常的对象,但它们只读取对象,没有进行任何修改。这可能还是个问题吗


任何关于我应该从何处着手解决此问题的建议都将不胜感激。

您可能希望在迭代之前创建本地副本,或者在迭代之前找到锁定集合的方法


通常情况下,在调试器中显示引发异常的实际行之后的下一行。

完整堆栈跟踪或.ToString对于这一行是必需的。为什么要将多线程作为标记?是否尝试了干净完整的重建。调试和发布之间的行为差异以及堆栈跟踪表明一行不是数组索引行这一事实表明调试信息与您的发布版本不同步。为什么您会在“return true?Kieren”行上说它是异常的?我已经提取了完整的堆栈跟踪。丹尼尔-因为我认为这可能与线程有关。我已经做了一次彻底的重建,但毫无结果,我已经被调查了好几天了。堆栈跟踪将行号报告为一行,表示“return true”。集合是一个300MB的查找表,因此制作多个副本并不理想。我可以尝试锁定,但它每秒被击中数千次,所以我试图避免开销。如果我只是在阅读收藏,是否需要锁定?