the*_*oop 3 .net performance ienumerable bitarray
System.BitArray仅实现非通用IEnumerable,它返回IEnumerator.Current属性的Object.是否通过BitArray运行foreach - 例如
foreach (bool b in bitArray)
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
框和unbox每个位值?
看看反射器中的bitarray枚举器,看起来它在每次调用MoveNext()时都会有一个新的位掩码而不是更聪明的东西.是否有更有效的方法来枚举BitArray,或者替换具有相同存储特性的BitArray?(List <bool> etc每个bool使用一个字节,而不是一个比特,因此使用8x的空间)
是的,这将导致很多拳击.但是,在大多数情况下,我实际上并不希望这会对性能造成太大影响.这很烦人,但我怀疑许多真实世界的应用程序花费大量时间装箱/拆箱(或者之后清理箱子,当然这是其他费用).在你努力避免它之前,可能值得检查一下.
你可以很容易地编写自己的迭代器...特别是如果你不关心"版本"是否发生变化.例如:
public static IEnumerable<bool> EnumerateBitArray(BitArray bitArray)
{
for (int i=0; i < bitArray.Length; i++)
{
yield return bitArray[i];
}
}
Run Code Online (Sandbox Code Playgroud)
如果你不好的事情几乎肯定会发生做改变数组,而你遍历虽然-特别是如果你改变了长度!