2011-03-31 52 views
0

我有一个IndexOutOfRangeException,我不能在调试模式下重现,根据从哪里引发异常的堆栈跟踪它发生在“return true;”行上。该行没有数组索引,甚至没有任何数组索引,异常显然正在抛出。所以我猜测堆栈跟踪可能是一个红鲱鱼。.NET 4中的Obscure IndexOutOfRangeException

有谁知道什么可能会导致此行为?我确实有多个线程访问抛出异常的对象,但它们只是从对象中读取,没有进行修改。可能这仍然是一个问题?

任何指针,我应该开始寻找解决这个问题将不胜感激。

+3

一个完整的堆栈跟踪或的ToString()是必要的这一 – 2011-03-31 15:14:09

+2

你为什么多线程作为标签? – 2011-03-31 15:14:24

+1

您是否尝试过“清洁”和“完全重建”。调试和释放之间的行为差​​异以及堆栈跟踪指示的行不是数组索引行会导致调试信息与您的发行版本不同步。 – thrag 2011-03-31 15:16:40

回答

0

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

A fairly easy read on threading usage in C#

(通常情况下,它的下一行调试器显示抛出异常的实际行之后。)

+0

这个集合是一个300MB的查找表,所以制作多个副本并不理想,我可以尝试锁定,但它每秒钟会产生数千次,所以我试图避免这种开销,如果我只是需要锁定从集合中读取? – 2011-03-31 21:51:08