2015-09-05 4 views
9

私はかなりメモリの問題に新しいです。あなたはこれが愚かな質問ではないと思うことを願っています。C#ラージオブジェクトの中サイズのコレクション

は、私は思ったんだけど すなわち

Byte[] hugeByteCollection = new Byte[85000]; 

より大きく85,000バイトは、C#でLOHに置かれるそのメモリを知っているかのサイズ10000のコレクション - 10個のメンバ変数を含むオブジェクトと20000(バイトタイプ)はLOHまたはSOHに入れられますか?

答えて

4

オブジェクトの配列のサイズは、オブジェクトの数にポインターのサイズを掛けたものです。これは、値の型だけが配列自体に格納されるため、参照型(オブジェクト)は他の場所に格納され、配列のサイズには数えられません。したがって、85000/4 = 21250オブジェクトと85000/8 = 10625オブジェクトは、32ビットモードと64ビットモードのSOH上の配列にそれぞれ格納できます。

編集: 使用したコレクションの種類が配列であり、一覧ではないことを前提としていることを指摘してくれたHans Passantに感謝します。あまりにも多くの割り当てを避けるために、コンテンツのサイズよりも大きくなるようにリサイズします。詳細については、this linkを参照してください。

+1

この種の計算はコレクションタイプでは機能しません。実際には16,384です。詳細については、[この回答](http://stackoverflow.com/a/2248188/17034)を参照してください。 –

+0

コメントありがとうございます!あなたが話しているサイズ変更は、配列ではなくリストにしかないので、この質問には直接関係しません。しかし、まだ多くのオブジェクトが含まれているリストのSOHリストを維持するために、 –

+0

という警告を追加する必要があります。 リストの配列を含む分割リストを作成する必要があります。 partitionListは新しいリストを動的に作成し、リストが容量10000を超えるとarryに追加されます これは機能しますか? – cscmh99

関連する問題