我们正尝试在30分钟以上的单次提交中更新20000条记录。我们正在考虑减少记录数量,并实施批处理过程,以提交1000条记录。有没有人提供改善性能的建议?
答案 0 :(得分:1)
默认情况下,EF对单个更新执行1个查询。您可以编写接受表值参数的存储过程,从而通过单个查询更新多行,从而减少往返开销。
同样对于批量插入,您可以使用SqlBulkCopy
类。
更新:或者,您可以使用第三方库来执行此操作。像https://entityframework-plus.net/?z=ef-extended和https://entityframework-extensions.net/之类的东西,我也通过SqlBulkCopy使用simple wrapper进行批量插入。
Update2 :来自Microsoft的示例如何使用表值参数:https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/table-valued-parameters用于ADO.Net,但是对于EF也可以使用类似的方法。
答案 1 :(得分:0)
您可以使用存储过程或使用Ef扩展,例如,请参阅https://entityframework-plus.net/batch-update。