SQL 查询从 SQL 服务器获取大量数据时出现 OutOfMemoryException

OutOfMemoryException with SQL query getting large amount of data from SQL Server

我正在进行迁移,当我尝试从 SQL 服务器获取数据时遇到了糟糕的性能。我的做法是:

ctx.ExampleEntity.Database.SQLQuery<ClassConverter>("Select....")

ClassConverter是一个class,与ExampleEntity没有关系。问题是我从该查询中获得了超过 150 万条记录,当它尝试创建列表时,它抛出一个 OutOfMemoryException 而我无法避免。

是EF 6.0

////////////////////////////////解决方案

根据Mayu的回答,我写了这段代码,1M不抛异常。 sql return 不在最终数据库中的记录。

List<ClassConverter> listRowsToInsert = new List<ClassConverter>();
int countRecords=-1;
int skipCount = 0;
while(countRecords!=0){
   List<ClassConverter> listIndivInsert = genEntitAgp.Database.SqlQuery<ClassConverter>(File.ReadAllText("sql/limitPfm.sql")).Skip(skipCount).Take(1000000).ToList();
   countRecords = listIndivInsert.Count();
   listRowsToInsert.AddRange(listIndivInsert);
   if (countRecords < 1000000)
       countRecords = 0;
   skipCount += 1000000;
}

有什么想法吗?

感谢大家

如果您使用的是 EF 6.0,您可以映射实体然后使用 db.Records.Skip(n).Take(m) 批量处理它们吗?