c# – Index的替代原因在.Net字典中的数组的边界之外

前端之家收集整理的这篇文章主要介绍了c# – Index的替代原因在.Net字典中的数组的边界之外前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我了解一个Dictionary对象的边界错误之外的Index的主要原因之一是线程冲突. (同时读写相同的字典)但是,我遇到了一个令人困惑的情况,即线程冲突不够充分.

这是情况:
我已经编写了以不安全的方式实现Dictionary的代码,用于多线程处理.

代码已经作为Web服务实现到服务器A和服务器B的两个服务器上.通过负载平衡器访问服务器,负载平衡器将以循环方式向服务器A和B发送请求.

现在这里是棘手的部分.该错误显示在服务器A上,从不在服务器B上显示.根据我们的硬件团队,两台服务器是一样的.虽然线程冲突固有地是一个随机过程,但它仍然会同时影响我的服务器.我在一个服务器上看到错误的50个实例,另外一个是0.统计上不可能的是,线程冲突只发生在我的一个服务器上,而另一个运行无错误.

我已经在修改应用程序以使其线程更安全,但是在“Dictionary”对象的“插入”操作中会出现此错误的其他原因?

解决方法

Although thread collision is inherently a random process

一点也不.这是非常依赖时机的.时间可以重复,系统倾向于解决具体的模式.一个线程赛跑诊断工具,如Microsoft Research的CHESS,通过在线程的执行中注入随机延迟.使系统脱离这种模式.喜欢它本身偶尔做,但只有一个星期左右.这是随机的,只是不足够随便给你一个调试问题的镜头.

因此,看到一个服务器发生故障,而另一个服务器并不意味着什么.负载均衡器可能与之有关.你永远无法弄清楚确切的原因,因为你无法找出发生了50次的事情.这还不够

猜你在找的C#相关文章