2010-06-30 73 views
0

让说,我有一个非常大的结果集(100.000行)的查询和我在需要循环和执行更新:Linq2Sql:如何管理大型结果集?

var ds = context.Where(/* query */).Select(e => new { /* fields */ }); 

foreach(var d in ds) 
{ 
//perform update 
} 

我很好在这个过程中需要长时间来执行,但我的服务器上的内存量有限。

在foreach中发生了什么?整个结果是否从数据库中立即获取?

使用Skip和Take来分段更新会更好吗?

回答

1

最好的办法是使用跳过和采取肯定的,并确保每次更新后,你处置的DataContext(通过使用“使用”)

你可以看看我的问题,有一个很好的一个类似的问题解决方案:Out of memory when creating a lot of objects C#

1

YOu基本上滥用LINQ2SQL - 不是为了这个。

  • AL1结果被叠加到内存中。
  • Y完成后,我们的更改会写出一次。

这将是缓慢的,它将是 - 嗯 - 使用吨的内存。鉴于有限的内存量 - 不可能。

请勿一次加载所有数据。尝试使用部分结果集(每个1000-2500个项目)运行多个查询。

ORM's不适用于批量操作。

1

难道你不能使用存储过程来更新一切吗?