我在我的申请中发现了一个问题;基本上,一个子例程准备(批量)数据,这些数据稍后通过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性能问题
基础教程推荐
- C#实现六大设计原则之单一职责原则 2023-05-17
- 详解C#如何实现读写ini文件 2023-05-16
- c# – 如何使用Windows任务计划程序执行.Net Core 2.0控制台应用程序? 2023-09-19
- C#实现简单点餐系统 2023-04-22
- WPF实现自带触控键盘的文本框 2023-07-04
- c# – 找不到类型或命名空间名称“OracleConnection” 2023-11-22
- C# 创建单例的多种方式 2023-04-09
- C# 抽象类,抽象属性,抽象方法(实例讲解) 2022-12-02
- 一文带你了解C#操作MySql的方法 2023-07-18
- C#网络编程中常用特性介绍 2023-05-22