我想得到C#
中不同类型的两个大数组之间的差异。性能和优化是一个重要的方面,因为我必须比较大型元素阵列。
我必须能够从一个列表中获得与另一个列表相关的缺失元素,以及存在但不同的元素。
目标是从REST API
提供的外部数据中同步数据库中的数据。我在服务器上使用EF Core
,它为我提供了TLocal[]
,而REST API
为我提供TRemote[]
。由于这是一个定期从API检索的大数据,我希望避免将TRemote
转换为TLocal
来比较这两个列表。我有一个ID property
,这两种类型都通用,可以进行比较。
一些考虑过的可能性:
HashSet
:两个列表必须属于同一类型才能使用Except/Intersect
。我想保留两种不同的类型Join-Linq
:这允许使用两个不同类型的列表,但有性能成本。此外,我必须执行两个Join来获得两个列表之间的差异(添加/删除(IEqualityComparer
:使用Except/Intercept
和自定义EqualityComparer
来比较两个对象
还有其他选择吗?
如果您寻求性能,请避免使用LINQ(请阅读本文(。
我建议保留本地数据的Dictionary<(type of id), TLocal>
,以便有效地O(1(确定是否需要插入或更新远程对象。