BitArray高性能Or&并且&异或

时间:2015-03-07 16:53:32

标签: c# bitarray

以下是使用情况的检查:

bitarray = bitarray.And(mask);

问题是它与int[]上的相同操作相比有多高效,复制到同一个数组但没有创建另一个并返回它(花费时间和创建无用的垃圾) 我已经知道BitArray类型有私人非公开成员m_array,它只是int[]。 是否有一些方法可以在不创建新实例的情况下进行此操作?例如:

bitarray.And(mask);

更简单,我想加快这个操作

bitarray |= mask;

我会知道在不创建BitArray的新实例的情况下,bitarray实例发生了什么变化。

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

2 个答案:

答案 0 :(得分:0)

  

是否有一些方法可以在不创建新实例的情况下进行此操作?

BitArray.And()方法不会返回BitArray的新实例。它只返回“当前”实例(即调用方法时使用的实例)。

  

我会知道在没有创建BitArray

的新实例的情况下,bitarray实例发生了什么变化

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

请注意,要对此信息执行任何有趣的操作,您可能需要将其保存在某处的某些数据结构中。坦率地说,我没有看到避免为此目的创建新的BitArray对象的优势。

答案 1 :(得分:0)

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

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

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