c# – 大量插入的LINQ-to-SQL性能问题

我在我的申请中发现了一个问题;基本上,一个子例程准备(批量)数据,这些数据稍后通过LINQ-to-SQL数据上下文插入到我的本地数据库中.但是,当调用SubmitChanges()时,即使是相对适度数量的新数据(100,000-ish)也需要花费大...

我在我的申请中发现了一个问题;基本上,一个子例程准备(批量)数据,这些数据稍后通过LINQ-to-SQL数据上下文插入到我的本地数据库中.但是,当调用SubmitChanges()时,即使是相对适度数量的新数据(100,000-ish)也需要花费大量时间保存到数据库中.但是,大多数情况下,应用程序更有可能节省大约200,000到300,000行.

根据SQL Server的分析器,所有生成的查询看起来都如下所示,并且应用程序插入的每个项目都有一个查询.

exec sp_executesql N'INSERT INTO [dbo].[AdjectivesExpanded]([Adjective], [Genus], [Casus], [SingularOrPlural], [Kind], [Form])
VALUES (@p0, @p1, @p2, @p3, @p4, @p5)

SELECT CONVERT(BigInt,SCOPE_IDENTITY()) AS [value]',N'@p0 bigint,@p1 char(1),@p2 tinyint,@p3 bit,@p4 tinyint,@p5 nvarchar(4000)',@p0=2777,@p1='n',@p2=4,@p3=0,@p4=3,@p5=N'neugeborener'

有没有人知道如何使用LINQ-to-SQL数据上下文提高大量插入的性能,理想情况下,没有摆脱stronlgy类型的DataContext并回退到手写查询本身?此外,调整底层数据库的机会或空间很小.如果有的话,我可以禁用完整性约束,如果有帮助的话.

解决方法:

你在做这样的事情:

foreach (var adjective in adjectives) {
    dataContext.AdjectivesExpanding.InsertOnSubmit(adjective)
    dataContext.SubmitChanges();
}

要么:

foreach (var adjective in adjectives) {
    dataContext.AdjectivesExpanding.InsertOnSubmit(adjective);
}
dataContext.SubmitChanges();

如果它与第一个相似,我会建议将它改为第二个.每次调用SubmitChanges都会查看所有跟踪的对象,以查看更改的内容.

无论哪种方式,我都不相信插入那些项目是Linq-to-Sql的好主意,因为它每次都必须生成和评估SQL.

您可以编写存储过程的脚本并作为设计器的DataContext方法添加吗?

本文标题为:c# – 大量插入的LINQ-to-SQL性能问题

基础教程推荐