2011-03-31 59 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