我有一个简单的应用程序,它为HashSet添加了大约700万个短字符串<string>.偶尔在调用Hashset.Add()期间会出现异常:System.Collections.Generic.HashSet`1.IncreaseCapacity():索引超出了数组的范围.
这是一个间歇性的问题,似乎与内存有关,但这是在一个16 GB的win2k8 R2服务器上,没有太多其他功能,大部分物理内存都可用.有任何想法吗?
her*_*ter 39
这HashSet<T>不是线程安全的.特别是在多线程场景中添加项目并且必须增加内部容量时,事情可能会失去同步.
上的实例方法HashSet<T>不是线程安全的。特别是,当您尝试添加一个元素,该元素导致集合一次超过一个线程中的多个数组的现有数组的边界时,实例变量将用于跟踪集合的大小以及其中的最后一个索引该集合可以在两个线程中更新。特别是,如果在第一个线程完成复制目标数组之前,第二个线程(使用较大的值)更新了最后一个索引值,则它可能会尝试访问本地数组中不存在的元素,因为本地数组被分配为仅容纳第二个线程分配的元素一半的元素。