BitArray 高性能 Or & And & Xor

BitArray high performance Or & And & Xor

这是用法示例:

bitarray = bitarray.And(mask);

问题是与 int[] 上的相同操作相比,复制到同一个数组但不创建另一个数组和 return 它的效率如何(花费时间和创建无用的垃圾) 我已经知道什么 BitArray 类型具有私有非 public 成员 m_array,它只是 int[]。 有没有一些方法可以在不创建新实例的情况下进行此操作?例如像这样:

bitarray.And(mask);

而且更简单,我想把这个操作加起来

bitarray |= mask;

而且我会知道在不创建 BitArray.

的新实例的情况下,哪个实例 bitarray 在内部发生了变化

我知道,我可以通过反射来做到这一点,但我认为它不会更快... 还是有比创建我自己的 BitArray 更好的方法?

Is there some method to make this operations without creating new instances?

BitArray.And() 方法不会 return BitArray 的新实例。它只是 return 的 "current" 实例(即调用该方法时使用的实例)。

And I would know what instance bitarray changed inside without creating new instance of BitArray

在我看来,最直接的实现方法是简单地编写一个循环,将 bitarray 对象中的位值与 mask 对象中的位值进行比较 你应用And()方法之前。

请注意,要对这些信息做任何有趣的事情,您可能需要将其保存在某个数据结构中的某个地方。所以坦率地说,我认为避免为此目的创建新的 BitArray 对象没有多大优势。

与您自己的 int[] 实现相比效率如何?编写测试并找出答案。

BitArray 不是不可变的,它不会创建副本。它只是 returns 相同的实例。在我看来,您自己的实现并不能真正击败它。

参见位数组:http://referencesource.microsoft.com/#mscorlib/system/collections/bitarray.cs,0a9d097e057af932,references