C# Bulk Operations(转)
转自http://blog.csdn.net/winnyrain/article/details/51240684
Overcome SqlBulkCopy Limitations with C# Bulk Insw3school.com.cnert, Update, Delete and Merge
// Support all type of operations
var bulk = new BulkOperation(connection);
bulk.BulkInsert(dt);
bulk.BulkUpdate(dt);
bulk.BulkDelete(dt);
bulk.BulkMerge(dt);
// Support List<T> and Lambda Mapping
var bulk = new BulkOperation<Customer>(connection);
bulk.ColumnInputExpression = c => new { c.Name, c.FirstName };
bulk.ColumnOutputExpression = c => c.CustomerID;
bulk.ColumnPrimaryKeyExpression = c => c.Code;
bulk.BulkMerge(customers);
High Performance Operations
Use scalable bulk operations (Bulk Insert, Update, Delete and Merge) and always get the best performance available for your database provider.
- SQL Server 2008+
- SQL Azure
- SQL Compact
- MySQL
- SQLite
- PostgreSQL (Coming soon)
- Oracle (Coming soon)
Operations | 1,000 Rows | 10,000 Rows | 100,000 Rows | 1,000,000 Rows |
---|---|---|---|---|
Insert | 6 ms | 25 ms | 200 ms | 2,000 ms |
Update | 50 ms | 80 ms | 575 ms | 6,500 ms |
Delete | 45 ms | 70 ms | 625 ms | 6,800 ms |
Merge | 65 ms | 160 ms | 1,200 ms | 12,000 ms |
* Benchmark for SQL Server
Output Identity Value
Overcome SqlBulkCopy limitations and use flexible features to output inserted identity and concurrency column values.
// Output newly inserted identity value after an insert
bulk.ColumnMappings.Add("CustomerID", ColumnMappingDirectionType.Output);
bulk.BulkInsert(dt);
// Support all type of operations
var bulk = new BulkOperation(connection);
bulk.BulkInsert(dt);
bulk.BulkUpdate(dt);
bulk.BulkDelete(dt);
bulk.BulkMerge(dt);
bulk.BulkSaveChanges(ds);
bulk.BulkSynchronize(dt);
Reference:
http://bulk-operations.net/
http://www.zzzprojects.com/
Examples:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;
using System.Data.Common;
using System.Diagnostics;
using Z.BulkOperations;
using Z.Data.SqlClient; namespace BulkTest
{
class Program
{
static void Main(string[] args)
{
DataTable dt = new DataTable();
dt.TableName = "OBDData"; DataColumn column = new DataColumn("serviceid", typeof(long));
column.AutoIncrement = true;
dt.Columns.Add(column);
dt.Columns.Add(new DataColumn("gpstime", typeof(DateTime)));
dt.Columns.Add(new DataColumn("lat", typeof(Decimal)));
dt.Columns.Add(new DataColumn("lng", typeof(Decimal)));
dt.Columns.Add(new DataColumn("speed", typeof(Decimal)));
dt.Columns.Add(new DataColumn("altitude", typeof(int))); for (int d = 0; d < 100000; d++)
{
dt.Rows.Add(new object[] { null, DateTime.Now, d % 100, (d + 2) / (d + 1), (d + 3) / (d + 1), (d + 4) % 8 });
}
string ConnectionString = @"server=192.168.20.115\MSSQLSERVER2008;database=GPSTest;uid=test;pwd=test"; Stopwatch sw = new Stopwatch();
using (DbConnection connection = new SqlConnection(ConnectionString))
{ connection.Open();
sw.Start();
var bulk = new BulkOperation(connection);
//bulk.BulkInsert(dt);
bulk.BulkUpdate(dt);
//bulk.BulkDelete(dt);
//bulk.BulkMerge(dt);
//bulk.BulkSaveChanges(ds);
//bulk.BulkSynchronize(dt);
sw.Stop();
Console.WriteLine("用时:" + sw.ElapsedMilliseconds.ToString());
Console.Read(); }
}
}
}
C# Bulk Operations(转)的更多相关文章
- drupal7 Views Bulk Operations (VBO)
介绍 drupal通常用views制作列表,列表也应该能实现某些操作,例如删除.审批等,并且应该是批量进行的,VBO的存在就是为了实现views批量操作功能.事实上,drupal把操作统称为actio ...
- bulk更新mongodb的脚本
bulk批处理mongodb,比普通的js脚本来的更快一些. 官方网址:https://docs.mongodb.com/manual/reference/method/Bulk/ bulk支持的方法 ...
- Java使用实现面向对象编程:第七章集合框架的解读=>重中之重
对于集合框架,是非常重要的知识,是程序员必须要知道的知识点. 但是我们为什么要引入集合框架呢? 我们之前用过数组存储数据,但是采用数组存储存在了很多的缺陷.而现在我们引用了集合框架,可以完全弥补了数组 ...
- ElasticSearch+Kibana 索引操作( 附源码)
一 前言 ElasticiSearch 简介 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elastics ...
- jquery1.7.2的源码分析(二)
jquery.extend jQuery.extend = jQuery.fn.extend = function () { var options, name, src, copy, copyIsA ...
- sql跨库查询
---------------------------------------------------------------------------------- --1. 创建链接服务器 --1. ...
- Backbone源码分析(三)
Backbone源码分析(一) Backbone源码分析(二) Backbone中主要的业务逻辑位于Model和Collection,上一篇介绍了Backbone中的Model,这篇文章中将主要探讨C ...
- jQuery 2.0.3 源码分析 钩子机制 - 属性操作
jQuery提供了一些快捷函数来对dom对象的属性进行存取操作. 这一部分还是比较简单的. 根据API这章主要是分解5个方法 .attr() 获取匹配的元素集合中的第一个元素的属性的值 或 设置 ...
- jQuery 3.0 的 setter/getter 模式
jQuery 的 setter/getter 共用一个函数,通过是否传参来表明它是何种意义.简单说传参它是 setter,不传它是 getter. 一个函数具有多种意义在编程语言中并不罕见,比如函数重 ...
随机推荐
- 压力测试工具JMeter入门教程<转>
1.Jmeter 概要描叙 jmeter 是一款专门用于功能测试和压力测试的轻量级测试开发平台.多数情况下是用作压力测试,该测试工具在阿里巴巴有着广泛的使用,估计是不要钱吧,哈哈,功能上来说,整个平台 ...
- Sencha Touch 实战开发培训 视频教程 第二期 第七节
2014.4.21 晚上8:20左右开课. 本节课视频耗时比较短,不过期间意外情况比较多,录制时间偏长了点. 本期培训一共八节,前两节免费,后面的课程需要付费才可以观看. 本节内容: 视频的录制播放 ...
- 部署OpenStack问题汇总(七)--解决apache启动错误"httpd:Could not reliably determine..."
今天在调试openstack的时候,重启apache,出现以下报错: [root@hctrl log]# service httpd restart 停止 httpd:[确定] 正在启动 httpd: ...
- unity3d的优化场景技术LOD+IOC
一.unity3d的优化场景技术 LOD+IOC 遮挡剔除(occlusion culling)其实就是在摄像机范围内的物体才被渲染出来,没有在视野范围内的,统统关掉渲染,这样能让性能大大提高. I ...
- Java虚拟机七 虚拟机监控
jstack 用于导出Java应用程序的线程堆栈:jstack [-l] <pid> -l 选项用于打印锁的附加信息 jstack -l 2348 > /data/deadlock. ...
- vue--子组件主动获取父组件的数据和方法
子组件主动获取父组件的数据和方法 简单示例: this.$parent.数组 this.$parent.方法 示例: <template> <div id="Header& ...
- Vim 使用入门快捷键
Vim 和 Emac 都是利器啊,前段时间决定熟悉一套跨平台的编辑器,以便在 Win,Mac,Ubuntu 下都有相同的编辑体验. 于是尝试了一下 Vim,使用了一段时间,确实比 UE 之类的要高效. ...
- 7.18python进程池
主要方法 常用的就是 from multiprocessing import Pool map() 同步 apply() 同步 apply_async() 异步 手动 close() jo ...
- vue报错 Module not found: Error: Cannot resolve 'file' or 'directory'
炸了,我好写sell而组件,直接就用了,我的天哪 看你的写了吗,就用: Module not found: Error: Cannot resolve 'file' or 'directory' 页另 ...
- CCCC L2-020. 功夫传人 搜索 bfs && 精度+ 特判
https://www.patest.cn/contests/gplt/L2-020 题解:给你一颗树,让你遍历一遍,顺便更新一下数据,每次到根节点时将其对应的数据加到ans上面.这里用的bfs. 坑 ...