c#中的大型列表中的按位运算尽可能快

Ham*_*mid 3 c# performance

我有一个10,000长值的列表,我想比较那些数据与100,000其他长值比较是一个按位操作 - >

if (a&b==a) count++;
Run Code Online (Sandbox Code Playgroud)

哪个算法可以用来获得最佳性能?

dtb*_*dtb 5

如果我正确理解你的问题,你想要检查a每个b谓词是否为真.所以对你的问题的一个天真的解决方案如下:

var result = aList.Sum(a => bList.Count(b => (a & b) == a));
Run Code Online (Sandbox Code Playgroud)

我不知道这真的可以加快对任意谓词,因为你不能避开检查每一个a对每个b.你可以尝试的是并行运行查询:

var result = aList.AsParallel().Sum(a => bList.Count(b => (a & b) == a));
Run Code Online (Sandbox Code Playgroud)

例:

aList:10,000个随机long值; bList:100,000个随机long值.

  • 没有AsParallel:00:00:13.3945187

  • with AsParallel:00:00:03.8190386

  • 仅仅因为你在更多人之间分配工作并不意味着你工作效率更高. (2认同)