【发布时间】:2011-06-08 02:34:21
【问题描述】:
我了解 Dictionary 对象的 Index outside the bounds 错误的主要原因之一是线程冲突。 (同时读取和写入同一个字典)但是,我遇到了一个令人困惑的情况,即线程冲突不足以解释。
情况如下: 我编写的代码以不安全的方式实现 Dictionary 以进行多线程处理。
代码已作为 Web 服务实现到两台服务器(服务器 A 和服务器 B)上。通过负载平衡器访问服务器,负载平衡器将以循环方式向服务器 A 和 B 发送请求。
现在是棘手的部分。该错误仅显示在服务器 A 上,而从未出现在服务器 B 上。根据我们的硬件团队的说法,两台服务器是相同的。尽管线程冲突本质上是一个随机过程,但它仍然应该同样影响我的两个服务器。我在一台服务器上看到 50 多个错误实例,在另一台服务器上看到 0 个。从统计上看,线程冲突仅发生在我的一台服务器上,而另一台服务器运行时没有错误是不太可能的。
我已经在修改应用程序以使其线程更安全,但是在 Dictionary 对象的插入操作中,还有什么其他原因会引发此错误?
【问题讨论】:
-
您确定负载均衡器向服务器 B 发送请求吗?可能它只影响第一台服务器。
-
也许一台服务器有 32 位操作系统而另一台有 64 位?
-
@petro.sidlovskyy 我已经确认两台服务器都有基于日志文件的流量
-
你能升级到 .Net 4 并使用
ConcurrentDictionary吗? -
@Gabe 无法升级到 .Net 4
标签: c# .net dictionary