我有以下代码,我想加快速度:
foreach (var workflow in closedWorkflows)
{
var w = relatedWorkflows.FirstOrDefault(r => r.Fingerprint != workflow.Fingerprint && r.TradeDate == workflow.TradeDate);
if (w != null)
{
relatedWorkflows.Add(workflow);
}
}
relatedWorkflows
和closedWorkflows
是相同类型对象的列表。我考虑过在Fingerprint
和上使用匿名类或元组创建查找或字典TradeDate
,但一项检查是为了相等,另一项检查是为了不平等。TradeDate
在 上创建查找,然后Fingerprint
为 的每个查找列表创建查找是一个好方法吗TradeDate
?
更新:
非常感谢@Dmitry Bychenko。
在我的测试中,差异是 41486 毫秒 vs 26 毫秒!
性能的主要问题在于
我们
relatedWorkflows
一次又一次地扫描,这就是我们有O(closedWorkflows.Count * relatedWorkflows.Count)
时间复杂度的原因。relatedWorkflows.Count
我们可以借助基于哈希的集合(字典和哈希集)来摆脱,例如