【发布时间】:2014-03-05 22:08:08
【问题描述】:
现在我有一个应用程序,它一次处理一个数据库中的记录。
var records = from q in db.table
join j in db.OtherTable
where q.processed == 0 //Sample
foreach(var record in records)
{
//Do some stuff....
db.ExecuteCommand("Update table set record.processed = 1 where id = record.ID");
}
在 foreach 结束时,它会更新已处理的记录。显然,因为 LINQ 在更新方面做得不好,所以我只执行了一个 executeCommand。现在要求此应用程序快速运行。现在,“做一些事情”只需不到一秒的时间运行数千行,它甚至使用 SqlBulkCopy 将记录插入到表中。
问题在于,当我输入代码以更新记录已处理时,它会显着减慢它。它必须更新数据库数千次。什么是更新我选择的所有记录(并且只更新我选择的记录)而不损失太多速度的更快方法。 (注意:如果整个过程完成后(在foreach之后)如果需要一点时间也可以)。
【问题讨论】:
-
你能在 foreach 结束后更新 db 中的全部记录吗?或者您想在每次迭代中立即执行此操作?
-
您是否真的更新了
foreach循环内表中的每条记录?是否有某种标识符可用于仅更新一条记录? -
为什么不通过调用
SubmitChanges更新您的实体? -
哈姆雷特,因为我没有选择实际的实体(在上面的上下文中名为 table 的类),我相信更新它没有好处。是 D,每条记录都需要更新它已经处理过,因为这个过程会立即再次运行,我不能选择相同的记录。在 foreach 结束时更新就可以了。
-
@KJ3 我的意思是您正在在每个循环中更新整个表格 - 您已更正。