加快 LINQ 插入速度

2023-12-31

我有一个 CSV 文件,我必须将其插入 SQL Server 数据库。有没有办法加快 LINQ 插入速度?

我创建了一个简单的存储库方法来保存记录:

    public void SaveOffer(Offer offer)
    {
        Offer dbOffer = this.db.Offers.SingleOrDefault (
             o => o.offer_id == offer.offer_id);

        // add new offer
        if (dbOffer == null)
        {
            this.db.Offers.InsertOnSubmit(offer);
        }
        //update existing offer
        else
        {
            dbOffer = offer;
        }

        this.db.SubmitChanges();
    }

但使用这种方法,程序比使用 ADO.net SQL 插入(新的 SqlConnection、新的 SqlCommand 用于选择(如果存在)、新的 SqlCommand 用于更新/插入)插入数据要慢得多。

对于 100k csv 行,大约需要一个小时,而 ADO.net 方式则需要 1 分钟左右。对于 2M csv 行,ADO.net 花费了大约 20 分钟。 LINQ 在 25 分钟内添加了大约 30k 的 2M 行。我的数据库有 3 个表,在 dbml 中链接,但其他两个表是空的。测试是在所有桌子都是空的的情况下进行的。

附:我尝试过使用 SqlBulkCopy,但在将 Offer 插入数据库之前我需要对 Offer 进行一些转换,我认为这违背了 SqlBulkCopy 的目的。

更新/编辑: 18 小时后,LINQ 版本仅添加了大约 20 万行。

我也测试了仅使用 LINQ 插入的导入,并且与 ADO.net 相比也非常慢。我还没有看到插入/提交更改和选择/更新/插入/提交更改之间有很大的区别。

我仍然必须尝试批量提交,手动连接到数据库并编译查询。


SubmitChanges 不会批量更改,它会对每个对象执行一条插入语句。如果你想进行快速插入,我认为你需要停止使用 LINQ。

在执行 SubmitChanges 时,启动 SQL Profiler 并观察正在执行的 SQL。

请参阅问题“LINQ to SQL 可以执行批量更新和删除吗?或者它总是一次执行一行更新吗?”这里:http://www.hookedonlinq.com/LINQToSQLFAQ.ashx http://www.hookedonlinq.com/LINQToSQLFAQ.ashx

它链接到这篇文章:http://www.aneyfamily.com/terryandann/post/2008/04/Batch-Updates-and-Deletes-with-LINQ-to-SQL.aspx http://www.aneyfamily.com/terryandann/post/2008/04/Batch-Updates-and-Deletes-with-LINQ-to-SQL.aspx使用扩展方法来修复 linq 无法批量插入和更新等问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

加快 LINQ 插入速度 的相关文章

随机推荐

  • ldpi、mdpi、hdpi、xhdpi 显示的 Android 初始屏幕尺寸? - 例如:ldpi 为 1024X768 像素

    我必须使用phonegap 为Android 应用程序设计启动屏幕 加载时适合屏幕的图像 我必须设计适合 ldpi mdpi hdpi xhdpi 等 4 种屏幕的 4 种尺寸图像 谁能告诉我这些屏幕的确切像素尺寸 以便我可以按该尺寸进行设
  • Google Drive API - 权限 - 超出速率限制。用户留言: 抱歉,您已超出共享配额

    我一直在使用 Google Drive API 以编程方式创建和共享文档 昨天 我开始在每个插入权限的请求中收到此错误消息 com google api client googleapis json GoogleJsonResponseEx
  • Android:跳过依赖项项目的 Gradle“testClasses”任务

    我已关注本指南 https developer android com training testing unit testing local unit tests html在 Android Studio v1 4 中为我的主 Andro
  • 如何以编程方式在 iPhone 上启动 Contacts.app

    我想在用户需要添加联系人时启动 Contacts app 我的应用程序已经从联系人 API 读取 如果可以避免的话 我宁愿不重新实现功能 我的目标是 iOS 4 0 及以上版本 如果您想添加联系人 请使用ABNewPersonViewCon
  • 如何优化全文搜索的 Core Data 查询

    在文本中搜索匹配单词时可以优化核心数据查询吗 这个问题也涉及到 iPhone 上自定义 SQL 与 Core Data 的区别 我正在开发一款新的 iPhone 应用程序 它是科学数据库的手持参考工具 主界面是一个标准的可搜索表格视图 我希
  • 带有 Swift 5.0 编译器的 Xcode 10.2 - 协议继承问题

    当前的 Xcode 版本 10 2 存在一个大问题 有一个BasicViewController具有以下签名的类 class BasicViewController UIViewController UITableViewDataSourc
  • SceneKit:关于像 Tron 光循环一样再现发光光迹的建议

    目标是在 SceneKit 中重现类似于下图的光迹 路径不需要那么详细 但我们的想法是实现类似的视觉效果 我们尝试使用不透明度约为 0 5 的薄立方体 我们将大约 200 个灯串在一起 并将它们连接到一个节点上 作为光迹 那根本没有表现 另
  • 更新文件时从 AWS S3 下载

    这似乎是一个非常基本的问题 但如果我从 S3 下载文件 同时另一个进程正在更新该文件 我是否需要担心获得不完整的文件 示例 200MB 的 CSV 文件 用户 A 开始以 1Mbps 的速度更新文件 其中包含 200MB 的新内容 16秒后
  • 在 Oracle 中将表与其自身连接

    对这个很困惑 我正在尝试将一个表连接到其自身 我有以下详细信息 PRODUCT NO FORMAT NO FORMAT CODE NUMBER 1000 1111 P 0 1000 1112 O 0 1000 1113 H 546 我想创建
  • scikit-learn GaussianHMM ValueError:输入必须是方阵

    我正在使用 scikit learn 的 GaussianHMM 当我尝试将其拟合到一些观察结果时 出现以下 ValueError 这是演示错误的代码 gt gt gt from sklearn hmm import GaussianHMM
  • 使用 Python 通过 HTTP 下载压缩内容

    使用 Python 下载网页时如何利用 HTTP 1 1 的压缩功能 我目前正在使用内置的urllib http docs python org library urllib html用于下载网页内容的模块 通读文档 我找不到任何确实使用压
  • iOS 在故事板中切换嵌入视图

    我一整天都在试图解决这个问题 我知道它应该能够完成 但是作为使用 Objective C 而不是 Appcelerator 的 iOS 开发新手 我遇到了新手问题 我想要完成的是在我的其他视图之一中拥有嵌入视图 但能够通过编程切换嵌入的视图
  • Selenium C# Webdriver 如何检测元素是否可见

    最新版本的 Selenium DotNet Webdriver 2 22 0 有没有办法在单击 交互之前检查元素是否可见 我发现的唯一方法是尝试处理当您尝试发送密钥或单击它时发生的 ElementNotVisible 异常 不幸的是 这仅在
  • 使用 Office365 JS API 从 EWS 或 REST API 访问自定义属性集

    我有一个 Office 365 邮件应用程序 它在保存项目之前将值存储在自定义属性中 保存项目后 我想使用服务器端应用程序访问此属性 阅读自定义属性文档 https msdn microsoft com en us library offi
  • 将数据从视图传递到控制器 asp.net core razor 页面

    我正在尝试创建一个简单的 asp net core razor 网站 我有一个cshtml页面 page using RazorPages model IndexModel using Html BeginForm
  • AngularJS ng-table 固定标头

    我正在使用 ng table 来显示一些信息 我想固定 ng table 的页眉和页脚 并强制 ng table 在行内绘制滚动条 ng table 文档网站没有关于如何实现这一点的文档 有任何想法吗 这个仅 CSS 的解决方案对我有用 只
  • 按员工部门划分且员工人数超过 5 人

    我想显示department id与 count 一起 并且 count 应大于 5 并且我希望有 1 月份未雇用的员工 我尝试了以下查询 SELECT FROM EMPLOYEES WHERE DEPARTMENT ID IN SELEC
  • Excel VBA:等待 Internet Explorer 中的 JavaScript 执行

    我正在尝试在 Excel VBA 中进行一些网页抓取 这是我遇到问题的代码部分 IE Navigate URL Do DoEvents Loop While IE ReadyState lt gt 4 Or IE Busy True Set
  • 修改SVG路径的不透明度及其标记

    我正在尝试对使用 D3 以编程方式定义的路径进行一些修改 我想要进行的更改非常简单 修改路径的不透明度 我遇到的问题是 虽然路径本身会改变 但结束标记不会改变 而且我不太确定如何让它这样做 标记定义如下 define arrow marke
  • 加快 LINQ 插入速度

    我有一个 CSV 文件 我必须将其插入 SQL Server 数据库 有没有办法加快 LINQ 插入速度 我创建了一个简单的存储库方法来保存记录 public void SaveOffer Offer offer Offer dbOffer