Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 添加到Hashset时的IndexOutOfRangeException<;T>;_C#_.net_Hashset - Fatal编程技术网

C# 添加到Hashset时的IndexOutOfRangeException<;T>;

C# 添加到Hashset时的IndexOutOfRangeException<;T>;,c#,.net,hashset,C#,.net,Hashset,我有一个简单的应用程序,它向HashSet添加了大约700万个短字符串。在调用Hashset.Add():System.Collections.Generic.Hashset`1.IncreaseCapacity():索引超出数组的边界时,偶尔会出现异常 这是一个间歇性的问题,似乎与内存有关,但这是在一个16 GB的win2k8 R2服务器上,没有太多其他问题,大部分物理内存都是可用的。有什么想法吗?HashSet不是线程安全的。尤其是在多线程场景中添加项目并且必须增加内部容量时,事情可能会不同

我有一个简单的应用程序,它向HashSet
添加了大约700万个短字符串。在调用Hashset.Add():System.Collections.Generic.Hashset`1.IncreaseCapacity():索引超出数组的边界时,偶尔会出现异常


这是一个间歇性的问题,似乎与内存有关,但这是在一个16 GB的win2k8 R2服务器上,没有太多其他问题,大部分物理内存都是可用的。有什么想法吗?

HashSet不是线程安全的。尤其是在多线程场景中添加项目并且必须增加内部容量时,事情可能会不同步。

HashSet上的实例方法不是线程安全的。特别是,当您试图添加一个元素,该元素会导致集合一次在多个线程中超出现有数组的边界时,用于跟踪集合大小和集合中最后一个索引的实例变量可以在两个线程中更新。特别是,如果在第一个线程完成复制目标数组之前,第二个线程(使用更大的值)更新了最后一个索引值,它可能试图访问本地数组中不存在的元素,因为本地数组被分配为只包含第二个线程分配的元素的一半。

是否添加多线程?我刚刚创建了一个项目,该项目使用并行化在4核PC上添加int.MaxValue GUID,并且没有失败。是的,这就是问题所在。我早该知道的。谢谢herzmeister@herz-这就是答案,您可能想发布它。+1 IndexOutOfRangeException是一个明确的指标,表明从集合的添加操作中抛出时存在运行时线程问题。谢谢,这非常有帮助。我的项目使用的是
字典
,在我将其更改为HashSet并引发一些越界异常之前,没有发现任何问题。我不知道为什么它没有早些时候失败,因为字典也不是线程安全的