質問

ハッシュセットに約700万個の短い文字列を追加する簡単なアプリケーションがあります<string>. 。 hashset.add():system.collections.generic.hashset`1.increasecapacity()への呼び出し中に例外を取得することがあります。インデックスは配列の範囲外でした。

これは断続的な問題であり、メモリに関連しているようですが、これは16 GBのWin2K8 R2サーバー上にあり、他にあまり進行していません。その物理メモリのほとんどは利用可能です。何か案は?

役に立ちましたか?

解決

HashSet<T> スレッドセーフではありません。特に、マルチスレッドシナリオにアイテムを追加し、内部容量を増やす必要がある場合、物事は同期しなくなる可能性があります。

他のヒント

インスタンスメソッドのメソッド HashSet<T> スレッドセーフではありません。特に、セットが一度に複数のスレッドで既存の配列の境界を超える要素を追加しようとすると、インスタンス変数はセットのサイズと最後のインデックスを追跡するために使用されます。セットは両方のスレッドで更新できます。特に、最初のスレッドが宛先配列のコピーが完了する前に最後のインデックス値が2番目のスレッド(より大きな値で)によって更新された場合、ローカル配列のために存在しないローカルアレイの要素にアクセスしようとする可能性があります2番目のスレッドによって割り当てられた要素の半分しか保持しないように割り当てられました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top