新しいリストを作成する前に、リストの最大安全サイズを計算しようとしています。タイプに基づいてデータ構造のサイズを使用し、1 GB (2 GB は < .Net 4.5 の制限であるため) をそれで除算して、リストに安全に保持できる要素の数を確認することを考えています。おそらく、オーバーヘッドの場合とそうでない場合の maxnumber - 3 です。
あなたの考え?
リストに構造体が含まれている場合、このアプローチは機能しますが、メモリ アラインメントを考慮する必要があります (3 をはるかに超えるエラーが発生する可能性があります...)。参照型の場合、要素のサイズは 4 (32 ビット CLR の場合) または 8 (64 ビット CLR の場合) です。
ただし、これが問題になる場合は、代替手段の使用を検討する必要があります。リスト全体を別の場所 (データベース?) に保存して必要な部分をメモリに入れるか、リストのリスト (基本的にデータを断片化する) などの別のデータ構造を使用して、各小さなリストに 100,000 要素を配置します。
ほぼ 2Gb のバイト配列でサポートされているアイテムのリストを取得できるはずです (リストを動的に拡張しようとすると、再割り当ての状態により、明らかに最大サイズの半分近くで失敗します)。
データが不変でない場合は、代わりに、LOH で多くのオブジェクトを作成しない GC フレンドリーなアプローチを検討できます。すべての割り当てを LOH 割り当ての制限 (85Kb だと思います) 未満になるようにターゲット設定し、コードの動作が改善されるかどうかを測定します。