首页 > 解决方案 > 比较两个大列表的最佳方法,C#

问题描述

这是我的一个 ETL 项目同步两个数据库,一些表是 4G,所以 ETL 作业只是加载更新的数据以插入或更新,工作正常,但源表会删除一些记录,我想从我的表也​​。我所做的是:

List<long> SourceIDList; // load all ID from source table
List<long> MyIDList; // load all ID from my table
var NeedRemoveIDList = MyIDList.Except( SourceIDList );
foreach(var ID in NeedRemoveIDList)
   // remove from my table

代码逻辑工作,但是从 4G 表加载 ID 到 List 会通过“内存不足”异常,有没有更好的方法?

标签: c#databaselistlinq

解决方案


感谢所有评论,我最终在数据库中执行此操作,我将两个列表插入到临时表中,并使用 SQL 比较它们,需要一些时间来插入数据,但由于这是 ETL 工作,所以多花几分钟就可以了。


推荐阅读