【问题标题】:Obscure IndexOutOfRangeException in .NET 4.NET 4 中的模糊 IndexOutOfRangeException
【发布时间】:2011-03-31 15:11:16
【问题描述】:

我有一个 IndexOutOfRangeException,我无法在调试模式下重现,根据引发异常的堆栈跟踪,它发生在“return true;”行上该行没有数组索引,甚至在程序中也没有任何数组索引,异常显然被抛出。所以我猜堆栈跟踪可能有点红鲱鱼。

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

任何关于我应该从哪里开始解决这个问题的指针将不胜感激。

【问题讨论】:

  • 需要完整的堆栈跟踪或 .ToString()
  • 为什么要多线程作为标签?
  • 您是否尝试过“清理”和“完全重建”。调试和发布之间的行为差​​异以及堆栈跟踪指示的行不是数组索引行的事实表明调试信息与您的发布版本不同步。
  • 是什么让你说它是“return true”行除外?
  • Kieren - 我已经提取了完整的堆栈跟踪。 Daniel - 因为我认为它可能与线程有关。我做了一个完整的重建无济于事,我已经调查了几天。堆栈跟踪将行号报告为“return true”的行

标签: .net multithreading exception


【解决方案1】:

您可能想在迭代之前制作一个本地副本,或者想办法在迭代之前锁定集合。

A fairly easy read on threading usage in C#

(通常,它是在调试器中显示引发异常的实际行之后的下一行。)

【讨论】:

  • 该集合是一个 300MB 的查找表,因此制作多个副本并不理想。我可以尝试锁定,但每秒会被击中数千次,所以我试图避免开销。如果我只是从集合中读取,是否需要锁定?
猜你喜欢
  • 1970-01-01
  • 2013-01-21
  • 1970-01-01
  • 2010-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-21
  • 2010-11-01
相关资源
最近更新 更多