それは本当にあなたがそれで何をしているかに依存します. オーバーヘッドがはるかに少ないため、速度がより重要な場合はビット演算を使用すると思います。それ以外の場合は、BitArray で問題ありません。関連する主なオーバーヘッドは、関数呼び出しと、実行できる「トリック」の制限です。
たとえば、ビット 0、3、または 4 が値に設定されている場合に何かをしたい場合:
if((value & 0b11001)>0) //not sure this is valid syntax, but you get the idea
{
//do stuff
}
整数はネイティブの CLR 型であるため、ほぼ直接、わずか 3 つのネイティブ オペコード、、、、に変換されmov
ますand
。cmp
BitArray に関しては、私が見る最も効率的な方法は次のとおりです。
if(value[0] || value[3] || value[4])
{
//...
}
ここで (JIT ではないと仮定して)、これは最大 3 つの関数呼び出しに相当し、複雑さは軽度です。BitArray のバッキング整数 (私が推測) からビット値を取得する最も簡単な方法は次のようになります。
bool GetBit(int which)
{
return value & (1 << which)>0;
}
これは基本的に、1 ビットだけで約 2 倍遅くなることを意味します。この非常に単純なケースでは、3 ビットをチェックしているため、約 6 倍遅くなります。
また、BitArray の場合、コピーはネイティブの CLR 型ではないため、コストが高くなる可能性があります。このオーバーヘッドの大部分は JIT で取り除かれているのではないかと思いますが、特にコンパクトなフレームワークをターゲットにしている場合は、考慮すべきことがあります。
基本的に、BitArray に対して複雑なビット単位の操作を行う必要がない場合にのみ、BitArray を使用してください。
注: 整数と BitArray の間で変換するハイブリッド アプローチを使用することもできますが、これにもかなりのオーバーヘッドが発生する可能性があります。