Bitarray VS bool []

时间:2015-11-03 13:20:30

标签: c# boolean bitarray

我希望在这里找到一个关于此的现有问题,但我没有。

当您将Bitarray值存储在bool时,使用bool[]有什么好处?

System.Collections.BitArray biArray = new System.Collections.BitArray(8);
biArray[4] = true;

bool[] boArray = new bool[8];
boArray[4] = true;

bool[]对我来说似乎有点方便,因为存在更多(扩展)方法来处理数组而不是BitArray

2 个答案:

答案 0 :(得分:9)

存在内存/性能权衡。 BitArray每个字节将存储8个条目,但访问单个条目需要一堆逻辑操作。 bool数组将每个条目存储为一个字节,从而占用更多内存,但需要更少的CPU周期来访问。

基本上,BitArray是对bool []的内存优化,但除非内存稀疏,否则使用它是没有意义的。

编辑: 创建了一个简单的性能测试。 使用BitArray反转500M元素需要6秒钟在我的机器上:

const int limit = 500000000;
var bitarray = new BitArray(limit);
for (var i = 0; i < limit; ++i)
{
    bitarray[i] = !bitarray[i];
}

使用bool阵列的相同测试大约需要1.5秒:

const int limit = 500000000;
var boolarray = new bool[limit];
for (var i = 0; i < limit; ++i)
{
    boolarray[i] = !boolarray[i];
}

答案 1 :(得分:6)

BitArray是紧凑的,允许您执行按位操作。来自MSDN forum

  

BitArray为每个值使用一位,而bool []使用一个字节   对于每个值。你可以传递给BitArray构造函数   bools数组,字节数组或整数数组。您可以   还传递一个指定所需长度的整数值   (可选)一个布尔参数,用于指定各个位   应该设置与否。