BitArray と BitVector 32 構造の違いは何ですか? BitArray に対する BitVector 32 構造の利点は何ですか? BitVector 32 構造が BitArray よりも効率的なのはなぜですか?
前もって感謝します。
ジェイ...
BitArray と BitVector 32 構造の違いは何ですか? BitArray に対する BitVector 32 構造の利点は何ですか? BitVector 32 構造が BitArray よりも効率的なのはなぜですか?
前もって感謝します。
ジェイ...
BitVector32 は、内部で使用されるブール値と小さな整数に対して BitArray よりも効率的です。BitArray は必要に応じて無限に大きくなる可能性がありますが、クラス インスタンスが必要とするメモリとパフォーマンスのオーバーヘッドがあります。対照的に、BitVector32 は 32 ビットしか使用しません。
http://msdn.microsoft.com/en-us/library/system.collections.specialized.bitvector32.aspx
BitVector32 は構造体であり、4 バイトしか消費しません。BitArray はそれに関連付けられたオーバーヘッドを持つクラスであるため、効率が低くなります。BitArray はヒープ上に存在するため、オブジェクトを追加する前に少なくとも 8 バイトが必要です。スタックとヒープの詳細については、こちら を参照してください。
BitVector32に関する Microsoft のドキュメントには次のように記載されています。
BitVector32
BitArray
内部で使用されるブール値や小さな整数よりも効率的です。は必要に応じて無限に大きくなるBitArray
可能性がありますが、クラス インスタンスが必要とするメモリとパフォーマンスのオーバーヘッドがあります。対照的に、aBitVector32
は 32 ビットしか使用しません。
の容量はBitVector32
、 のサイズである 32 ビットに制限されていint
ます。したがって、インデックス作成とマスキングは 1 つの操作で行うことができます。これを 734 ビットのビット配列と比較すると、ビット 197 が設定されているかどうかを確認できます。それをどのように行うかを考えてください (クラス デザイナーの観点から)。
Aは、32ビット整数であり、クラスに関連付けられたオーバーヘッド(主にメモリオーバーヘッド)がないため、BitVector32
ブーストオーバーします。BitArray
つまり、32を超えるブール値を格納する必要がある場合は、を使用するBitArray
か、複数を使用する必要がありますBitVector32
。複数のBitVector32
場合は煩雑になる可能性があるため、それらを配列またはクラスに配置すると、パフォーマンスが向上しなくなります。
つまり、32以下のブール値を格納する必要がある場合は、を使用しBitVector32
ます。より多くを保存する必要がある場合は、盲目的に選択する前にニーズとコーディング条件を評価してくださいBitVector32
。そうしないと、再発明するためにより多くの作業を行いBitArray
、パフォーマンス上の利点が見られない可能性があります。
注:ほとんどの場合、私は。の代わりにフラグ付き列挙型BitVectore32
を使用することを好みます。説明といくつかの良いトリックについては、この質問を参照してください。