1

その中に100,000以上の数字を格納するArrayListがあります。各番号の長さは 10 桁以下です。プログラム自体にはデータ入力があり、ユーザー入力をループして、 を使用して数値のいずれかが既に配列にあるかどうかを確認しますif ArrayList.Contains(userinput)

このサイズの ArrayList があると、大量のメモリが使用されているように見えます。これを実行するためのより高速な方法はありますか?たとえば、データベースまたはIf TextFile.Contains(Line)?

4

3 に答える 3

7

List<T>ボクシングを避けてメモリを節約するには、 a を使用する必要があります。
を使用するHashSet<T>と、はるかに高速になりますが、より多くのメモリを使用しますList<T>

正確なシナリオによっては、データベースがおそらく最適です。

于 2012-04-18T15:47:34.177 に答える
4

別の解決策は、ソートされた順序100.000+で要素の配列を持ち、目的の要素を見つけるために使用することです。BinarySearch

Mush はそれよりも高速Containsであり、辞書の割り当ては必要ないため、追加のメモリ消費はありません。

これらはすべて、具体的なシナリオで適切な選択を選択するための測定対象です。

于 2012-04-18T15:51:13.393 に答える
0

同時読み取り/書き込みシナリオができたらすぐに、 の使用を検討してSystem.Collections.Concurrent.ConcurrentDictionary<,>ください。操作の周りにロックを必要としないため、パフォーマンスが向上するはずです。ただし、操作が単純な追加/取得/削除よりも複雑な場合でも、ロックが必要であり、HashSet<>より高速になるはずです (SLaks が提案したように)。

于 2012-04-18T16:56:12.963 に答える