LINQ to SQL - 如何使数据库更快地运行

时间:2012-01-21 03:01:03

标签: c# performance linq-to-sql

我有问题。我的LINQ to SQL查询以每秒1000行的速度将数据推送到数据库。但这对我来说太慢了。对象并不复杂。 CPU使用率<10%,带宽也不是瓶颈。

10%在客户端,在服务器上是0%或最大1%通常根本不工作,不遍历索引等。

为什么1000 / s很慢,我需要20000 / s左右的速度 - 200000 / s以其他方式解决我的问题我将获得比我能计算的更多的数据。

我没有使用事务但LINQ使用,当我发布例如milion将新对象发送到DataContext并运行SubmitChanges()时,这就是插入LINQ内部事务。

我不使用并行LINQ,我没有很多选择,主要是在这种情况下我插入对象并希望使用所有资源我不仅有5%od cpu和10kb / s的网络!

3 个答案:

答案 0 :(得分:2)

  

当我发布例如milion对象

算了。 Linq2sql不适用于此类大批量更新/插入。

问题是Linq2sql将为每个插入(更新)执行单独的插入(或更新)语句。这种行为不适合这么大的数字。

对于插入,您应该查看SqlBulkCopy,因为它是 lot 更快(并且实际上更快的数量级)。

答案 1 :(得分:1)

使用首先关闭预编译查询,LINQ-to-SQL可以实现一些性能优化。成本的很大一部分是编译实际查询。

http://www.albahari.com/nutshell/speedinguplinqtosql.aspx http://msdn.microsoft.com/en-us/library/bb399335.aspx

此外,您可以禁用对象跟踪,这可能会给您几毫秒的改进。这是在实例化之后立即在datacontext上完成的。

答案 2 :(得分:0)

之前我也遇到过这个问题。我使用的解决方案是实体框架。有一个教程here。一种传统的方法是使用LINQ-To-Entity,它具有类似的语法和C#对象的无缝集成。这种方式给了我10倍的加速度。但更有效(数量级)的方法是自己编写SQL语句,然后使用ExecuteStoreQuery函数来获取结果。它要求您编写SQL而不是LINQ语句,但返回的结果仍然可以通过C#轻松读取。