List(基本的にint.MaxValue)に追加できる項目の数に制限があることは知っていますが、毎日のシナリオでは100k、500k、100万という妥当な数字は何ですか?リストの妥当な数<string>要素ですか?
私はDataReaderを使用してListに一度に1つの文字列を追加して、その要素をバッチとして処理しています。バッチを大きすぎるとメモリの制限をあまり大きくしないようにしたいと思います。
List(基本的にint.MaxValue)に追加できる項目の数に制限があることは知っていますが、毎日のシナリオでは100k、500k、100万という妥当な数字は何ですか?リストの妥当な数<string>要素ですか?
私はDataReaderを使用してListに一度に1つの文字列を追加して、その要素をバッチとして処理しています。バッチを大きすぎるとメモリの制限をあまり大きくしないようにしたいと思います。
もう1つの方法は、リストではなくIEnumerableを返し、yield
キーワードを使用することです。これは、リストのための余分なメモリを消費しません。
public IEnumerable<string> MyBigList(DataReader reader)
{
while (reader.Read())
{
yield return (string) reader["SomeField"];
}
}
昔は、イテレータと呼ばれるC#のコルーチンと呼ばれていました。イテレータとyield
の詳細については、MSDNを参照してください。それが依存文字列(複数可)
foreach (var s in MyBigList(reader))
{
// do something with s
}
を処理するために
。
文字列のカウントサイズの主な考え方は、すべての文字がデフォルトで2バイトのメモリを占有するということです。
いくつかの注意事項:
List
を作成すると、指数関数的に増加します。O(N)
となります。おそらく、あなたの問題に応じて使用されたコレクションの種類を変更したり、データベースを使用したりしたいと考えています。List
はまったく必要ありません。多くの場合、「何List
項目の合理的な数がされ、」質問が
ほど重要ではないことは、「これは全くList
を使用するための合理的なケースですか?」。
メモリ内のダイナミックサイズのプレーンコレクション(List
)は、さまざまな使用シナリオでは便利または役に立たない可能性があり、どちらがあなたの場合(特にあなたのコードなし)かわかりません。
お使いのマシンと処理の意味によって異なります。あなたのコードのプロフィール – Rob
どのくらいの記憶がありますか?リスト内の文字列の大きさはどれくらいですか?その情報なしであなたの質問にどう答えることができますか? –
答えは常に42です –