我在我的申请中发现了一个问题;基本上,一个子例程准备(批量)数据,这些数据稍后通过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# – 什么时候.NET中的静态类加载到内存中? 2023-09-20
- c# – 来自数据库或代码的DropDownListFor枚举的MVC4最佳实践 2023-11-13
- C#图表算法之最小生成树 2023-06-05
- C#实现餐厅管理系统 2023-01-11
- Unity实现弹球打砖块游戏 2023-06-08
- C#算法之各位相加 2023-05-12
- Unity UI组件ScrollRect实现无限滚动条 2023-04-27
- Winform中实现图片格式转换 2023-03-28
- C#实现微信分账功能的完整步骤 2023-02-17
- C#通过JObject解析json对象 2023-06-22