c# - 在 C# 中尽可能快地在大列表中按位操作

标签 c# performance

我有一个 10,000 长值的列表 我想将该数据与其他 100,000 个长值进行比较 比较是按位运算 -->

if (a&b==a) count++;

我可以使用哪种算法来获得最佳性能?

最佳答案

如果我对您的问题的理解正确,您想要针对每个 b 检查 a 是否某个谓词为真。因此,您的问题的天真解决方案如下:

var result = aList.Sum(a => bList.Count(b => (a & b) == a));

我不确定这是否真的可以针对任意谓词加速,因为您无法绕过检查每个 a 与每个 b。您可以尝试并行运行查询:

var result = aList.AsParallel().Sum(a => bList.Count(b => (a & b) == a));

示例:

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

  • 没有 AsParallel:00:00:13.3945187

  • 使用 AsParallel:00:00:03.8190386

关于c# - 在 C# 中尽可能快地在大列表中按位操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10767673/

相关文章:

performance - 在 O(1) 时间内检索堆栈中的最小元素

java - Java 9 之前具有硬件加速支持的 AES GCM

c# - 在 .NET 中,使用 "foreach"迭代 IEnumerable<ValueType> 的实例会创建副本吗?那么我应该更喜欢使用 "for"而不是 "foreach"吗?

c# - SqlDependency.OnChange 触发但 SqlDataReader 未返回数据

javascript - 如何通过POST请求在[WebMethod]上传递参数

c# - 从 ItemsControl 中删除项目

jquery css opacity 跨浏览器性能

mysql - 具有相同结果的两个 SQL 查询,但一个查询快一个数量级

c# - 显示给定行执行次数的 C++ 报告工具

c# - 用数据库查询结果填充列表框