c#对大块位进行按位运算的最快方法

时间:2018-01-16 20:35:35

标签: c# performance bit-manipulation

我有一组包含数十万个标记01的数组。

我正在使用BitArray类来做类似的事情:

result = (BitArray)ab.Clone();
result.And(bc);
很多次......

当然,我必须先在Bitarray设置标记。

for (int i = 1; i < maxLen; i++) ab[i] = a[i] < b[i];

但是当我设置一次标志后,我就会对它们进行数千次操作andorxornot(所以按位运算更为重要)

从头开始。

我问你是否采用C#更快的方法来做这件事?

1 个答案:

答案 0 :(得分:4)

假设GPU不是一个选项,那么在支持SIMD操作的CPU上,最好的选择是Vector<byte>System.Runtime.CompilerServices.Unsafe中的方法允许您从不安全的指针(具体为:Vector<T>)加载Unsafe.Read<Vector<byte>>,允许它非常有效地用于通过fixed固定的数组。或者:等到Span<T>成为主流,然后使用NonPortableCast<byte, Vector<byte>>