LINQ-to-SQL和批量更改提交速度非常慢

时间:2009-07-02 08:26:51

标签: .net performance linq-to-sql

我正在迭代一组LINQ-to-SQL类的实例化。

在这次迭代中,我正在进行更改,标记一些删除,甚至在datacontext中插入新的。当我完成迭代时,我开火context.SubmitChanges() - 它起作用,但它的速度非常慢。我在本地运行MSSQL 2008的快速版本。

另外,我注意到它生成的UPDATE语句,对于需要更新的行,它在所有字段/列上显示UPDATE SET ..... WHERE @p1 = ... AND @p2 = ...。我已经在表中定义了主键,也在DBML模式中定义了主键,但它似乎仍然在UPDATE语句的所有列上进行比较,而不仅仅是主键。

有什么想法吗?


更新

正如我所担心的那样,这是因为我忘了在定义主键和表上必要的索引后更新LINQ-to-SQL模式。

有问题的卷大约有4万行,我对我的解决方案的性能非常满意。

如果卷应该上升,我将研究Marc所提到的并发检查属性。

1 个答案:

答案 0 :(得分:2)

WHERE @p1 = ... AND @p2 =与并发检查相关联。你可以禁用每列,或者(更好)使用时间戳/ rowversion(耶!)。查看dbml设计器中的“更新检查”和“时间戳”属性。将rowversion添加到表中并将表重新导入dbml将是我的首选选项。

我们在这里谈论什么样的音量?数百?成千上万的?更?

LINQ-to-SQL(和EF)在逐个OO的基础上进行更改,因此逐行。除了基于集合的更新之外,还有一个限制,你需要编写一个存储过程来完成所有工作。

如果您没有进行大量更改,但仍需要很长时间,我预计问题是主键上缺少适当的索引。

相关问题