使用 SqlBulkCopy 是否有比使用 DataTable 更快的方法?

2023-12-06

我将大量记录加载到我的应用程序中(超过 100 万条)并对它们进行大量处理。处理需要它们全部位于内存中。

之后,我想将所有(现已修改的)记录转储到一个空表中。

加载记录只需要几秒钟,我最终会得到一大堆MyRecord items.

保存使用SqlBulkCopy也只需几秒钟。

However SqlBulkCopy需要(我相信)DataTable- 并将我的记录加载到DataTable速度很慢 - 每分钟大约 7500 条记录

dataTable.Rows.Add(myRecord.Name, myRecord.Age, ....)

有没有更快的方法来执行这个中间步骤?


造成延迟的原因是您必须将所有内容缓冲到数据表中,然后再将其发送到服务器。为了获得更好的性能,您应该立即将记录发送到 SqlBulkCopy,并让该类使用自己的缓冲和批处理。

SqlBulkCopy 可以与 IDataReader 一起使用。所有 ADO.NET 数据读取器都实现此接口,因此您可以将从任何数据读取器读取的数据推送到 SqlBulkCopy。

在其他情况下,假设您有一个 IEnumerable 对象,您可以使用 Marc Gravel 的 ObjectReader快速会员包以在 IEnumerable 之上创建 IDataReader。该数据读取器可以not一次加载所有内容,因此在 SqlBulkCopy 请求之前不会缓存任何数据:

复制 Marc Gravel 的示例:

IEnumerable<SomeType> data = ... 

using(var bcp = new SqlBulkCopy(connection)) 
using(var reader = ObjectReader.Create(data, "Id", "Name", "Description")) 
{ 
  bcp.DestinationTableName = "SomeTable"; 
  bcp.WriteToServer(reader); 
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 SqlBulkCopy 是否有比使用 DataTable 更快的方法? 的相关文章

随机推荐

  • 将 Adob​​e Air 3.3 SDK 与 Flash Builder 结合使用

    Adobe Air SDK V3 3终于于2012年6月8日发布 可以在这里下载 http www adobe com products air html 现在我尝试在 Flash Builder V4 6 中使用它 方法是在 Applic
  • 如何将 GPS 和网络位置坐标发送到服务器(静态 IP)?

    我是 Android 开发的初学者 我想制作一个 Android 应用程序 它将 GPS 和网络位置 纬度和经度 发送到我的服务器 静态 IP 我找到了以下代码并且它工作成功 在服务器端已经制作的应用程序中接收数据 现在它与客户端应用程序无
  • 动态添加验证规则

    我有一个插件 它通常处理用于 CRUD 操作的 jQuery 对话框的创建 添加到对话框的表单标记可在插件代码外部使用 并且插件只需请求 http 服务提供标记 并且在收到标记时只需将其添加到对话框本身 然后我在插件中创建了一个回调 onS
  • Java 虚拟机的字节顺序

    Java 在其虚拟机中使用什么字节序 我记得在某处读到它取决于它运行的物理机器 然后我在其他地方读到它总是 我相信 大端 哪个是对的 多字节数据在class文件以大端存储 From Java 虚拟机规范 Java SE 7 版 第 4 章
  • 是否可以将一个 XOR 约束链接到 UML 中的另一个 XOR 约束?

    这是我想做的一个例子 假设我有 5 个类 我想表达这样的约束 我们可以有一个类 B 或 和 C 的实例链接到 A 如果是这样 我们就不能有其他任何东西 如果我们不这样做没有这些类的任何实例 我们只能有 D 或 E 类的一个实例 我在这里查看
  • 阻止 MFC 应用程序将光标更改回默认图标

    我编写了一个应用程序 它根据光标在窗口客户区域内的位置来更改光标 但是我注意到 当我单击鼠标左键时 光标会变回默认箭头图标 我已经覆盖了afx msg void CWnd OnLButtonDown 并且不要调用其中的任何基类函数 它完全是
  • 有什么方法可以增加 MATLAB 中的“realmax”吗?

    我的机器上的 realmax 是 1 7977e 308 我知道我必须以一种避免长整数计算的方式编写代码 但是有什么方法可以增加限制吗 我的意思是像 C 中的 gmp 库之类的东西 你可能会发现vpa 变精度算术 有帮助 R vpa A 使
  • 如何做出类似tokiolab.it的视差效果? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我读了很多关于 jQuery 视差的文章 但我根本不明白 我想做和这个网站一样的事情 http www tokiolab it 正如您所看到的 第一页是一个非常简单的动画 但是当
  • 从命令行使用参数(连接字符串、用户、密码...)打开 SQL Developer

    是否可以使用参数 例如 Connectstring SID 主机 用户 密码 从命令行打开 Oracle SQL Developer 4 我想从 KeePass 运行它 并且我想移交这些参数来访问数据库 Thanks 不 这对于 SQL D
  • Android Socket Client 未发送并自行关闭

    我对 android 和 java 编程很陌生 我需要你的帮助 我想在我的 PC Windows 7 上创建 Android 客户端和服务器 我用putty 一个模仿客户端的程序 没有编程错误 检查了我的服务器编程是否没有错误 因此我认识到
  • Net::HTTP 在 Ruby 中获取超时

    如何在 net http 中设置更大的超时 我正在做的是这样的 rta JSON parse Net HTTP get URI url 我试过了 uri URI url http Net HTTP new uri host uri port
  • Swift - 通过 alamofire 上传图像时,HTTP 加载失败(错误代码:-1005 [4:-4])。

    我是 iOS 新手 使用 Alamofire 上传图像 我写的代码如下 let image imageView image let imgData UIImageJPEGRepresentation image 0 2 let header
  • 自定义数组类:列表初始化的构造函数

    我正在 C 中开发一个自定义数组类 作为自我引导的练习 并且我不确定如何创建一个构造函数来允许我执行以下操作 include array h include
  • 在 Javascript 中将多个变量分配给同一个值?

    我在 JavaScript 文件中初始化了全局范围内的几个变量 var moveUp moveDown moveLeft moveRight var mouseDown touchDown 我需要将所有这些变量设置为 false 这是我目前
  • 将 JavaScript 数组转换为字符串

    我正在尝试迭代 值 列表并将其转换为字符串 这是代码 var blkstr each value function idx2 val2 var str idx2 val2 alert str return str get join Aler
  • axios请求错误SSL连接错误React JS

    我在 React JS 中有这个发布请求 我需要使用 Rest API 传递文件并接收对 React 的响应 但当我这样做时 我收到错误 用 python 编写的 Rest Api 我对文件做了一些处理 let postR results
  • 使用 PHP POST 到 Web 服务的摘要式身份验证的客户端部分

    我正在尝试 POST 到 Web 服务 非 RESTful 并通过 PHP 获取响应 但是 该 Web 服务需要摘要式身份验证 我一直在网上搜索 发现大多数讨论和文章都是关于相反的方式 向用户请求摘要式身份验证 而不是使用 PHP 进行响应
  • 从 DataTable 填充 MVC Webgrid

    我正在尝试使用 DataTable 填充 MVC Webgrid 该 DataTable 在后面的代码中构建 然后使用 AsEnumerable 扩展方法进行枚举 但是 当我调用 GetHtml 方法时 输出不是我所期望的 它由两列 Has
  • C# 如何创建一组集合

    我想创建一组 int 的 集合 就像是 SortedSet
  • 使用 SqlBulkCopy 是否有比使用 DataTable 更快的方法?

    我将大量记录加载到我的应用程序中 超过 100 万条 并对它们进行大量处理 处理需要它们全部位于内存中 之后 我想将所有 现已修改的 记录转储到一个空表中 加载记录只需要几秒钟 我最终会得到一大堆MyRecord items 保存使用Sql