我希望在这里找到一个关于此的现有问题,但我没有。
当您将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
答案 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数组,字节数组或整数数组。您可以 还传递一个指定所需长度的整数值 (可选)一个布尔参数,用于指定各个位 应该设置与否。