16

BitArray と BitVector 32 構造の違いは何ですか? BitArray に対する BitVector 32 構造の利点は何ですか? BitVector 32 構造が BitArray よりも効率的なのはなぜですか?

前もって感謝します。

ジェイ...

4

3 に答える 3

17

BitVector32 は、内部で使用されるブール値と小さな整数に対して BitArray よりも効率的です。BitArray は必要に応じて無限に大きくなる可能性がありますが、クラス インスタンスが必要とするメモリとパフォーマンスのオーバーヘッドがあります。対照的に、BitVector32 は 32 ビットしか使用しません。

http://msdn.microsoft.com/en-us/library/system.collections.specialized.bitvector32.aspx

BitVector32 は構造体であり、4 バイトしか消費しません。BitArray はそれに関連付けられたオーバーヘッドを持つクラスであるため、効率が低くなります。BitArray はヒープ上に存在するため、オブジェクトを追加する前に少なくとも 8 バイトが必要です。スタックとヒープの詳細については、こちら を参照してください

于 2009-05-24T11:27:20.123 に答える
8

BitVector32に関する Microsoft のドキュメントには次のように記載されています。

BitVector32BitArray内部で使用されるブール値や小さな整数よりも効率的です。は必要に応じて無限に大きくなるBitArray可能性がありますが、クラス インスタンスが必要とするメモリとパフォーマンスのオーバーヘッドがあります。対照的に、aBitVector32は 32 ビットしか使用しません。

の容量はBitVector32、 のサイズである 32 ビットに制限されていintます。したがって、インデックス作成とマスキングは 1 つの操作で行うことができます。これを 734 ビットのビット配列と比較すると、ビット 197 が設定されているかどうかを確認できます。それをどのように行うかを考えてください (クラス デザイナーの観点から)。

于 2009-05-24T11:20:36.860 に答える
4

Aは、32ビット整数であり、クラスに関連付けられたオーバーヘッド(主にメモリオーバーヘッド)がないため、BitVector32ブーストオーバーします。BitArray

つまり、32を超えるブール値を格納する必要がある場合は、を使用するBitArrayか、複数を使用する必要がありますBitVector32。複数のBitVector32場合は煩雑になる可能性があるため、それらを配列またはクラスに配置すると、パフォーマンスが向上しなくなります。

つまり、32以下のブール値を格納する必要がある場合は、を使用しBitVector32ます。より多くを保存する必要がある場合は、盲目的に選択する前にニーズとコーディング条件を評価してくださいBitVector32。そうしないと、再発明するためにより多くの作業を行いBitArray、パフォーマンス上の利点が見られない可能性があります。

注:ほとんどの場合、私は。の代わりにフラグ付き列挙型BitVectore32を使用することを好みます。説明といくつかの良いトリックについては、この質問を参照してください。

于 2013-02-13T20:14:02.383 に答える