在两个不同类型的列表之间查找差异

时间:2019-11-21 13:01:58

标签: c# .net performance compare

我想弄清C#中两个不同类型的大型数组之间的区别。性能和优化是重要的一点,因为我必须比较大型的元素数组。

我必须能够从一个列表中获得与另一个列表相关的缺失元素,以及存在但不同的元素。

目标是从REST API提供的外部数据中同步数据库中的数据。我在服务器上使用EF Core,这为我提供了TLocal[],而REST API为我提供了TRemote[]。由于这是定期从API检索的大数据,因此我想避免将TRemote转换为TLocal来比较两个列表。我有两种类型共有的ID property,可以进行比较。

一些考虑的可能性:

  • HashSet:两个列表都必须具有相同的类型才能使用Except/Intersect。我想保留两种不同的类型。
  • Join-Linq:这允许使用两个不同类型的列表,但会降低性能。此外,我必须执行两个Join才能获得两个列表之间的差异(添加/删除)。
  • IEqualityComparer:将Except/Intercept与自定义EqualityComparer结合使用来比较两个对象。

还有其他选择吗?

1 个答案:

答案 0 :(得分:0)

如果您寻求性能,请避免使用LINQ(请阅读this)。

我建议保留Dictionary<(type of id), TLocal>的本地数据,以便有效O(1)确定是否需要插入或更新远程对象。