zoukankan      html  css  js  c++  java
  • 关于SqlBulkCopy的测试

    最近要做.net关于sql大量插入,找到了sqlbulkcopy(自己google下,应该很多说明了)这个好东西,于是测试下性能,用了三个方法对比:

    1)直接用ado.net,for循环N次进行单条插入

    2)把N条插入语句拼在一个sql,进行插入

    3)直接使用sqlbulkcopy进行插入

    代码如下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Data;
    using System.Data.SqlClient;
    using System.Diagnostics;
    
    namespace SQLTEST
    {
        class Program
        {
            static void Main(string[] args)
            {
    
                //int time = 200;
                test(20);
                test(200);
                test(2000);
                test(10000);
                test(50000);
                Console.ReadLine();
            }
    
            public static void test(int time){
                Stopwatch sp = new Stopwatch();
                Console.WriteLine(time + "条数据插入测试");
    
                //测试方法1
                {
                    using (SqlConnection sqlcon = new SqlConnection("Data Source=.;Initial Catalog=Test;User ID=sa;Password=??"))
                    {
                        sqlcon.Open();
                        string singesql = "INSERT INTO [student] ([name],[age])VALUES('abc',3);";
                        SqlCommand sqlcommand = new SqlCommand(singesql, sqlcon);
                        //计时开始
                        sp.Restart();
                        for (int i = 0; i < time; i++)
                        {
                            sqlcommand.ExecuteNonQuery();
                        }
                        sp.Stop();
                    }
                }
                Console.WriteLine("方法1:" + sp.ElapsedMilliseconds + "毫秒");
    
    
    
                //测试方法2
                {
                    using (SqlConnection sqlcon = new SqlConnection("Data Source=.;Initial Catalog=Test;User ID=sa;Password=??"))
                    {
                        sqlcon.Open();
                        string singesql = "INSERT INTO [student] ([name],[age])VALUES('abc',3);";
                        string execsql = "";
                        for (int i = 0; i < time; i++)
                        {
                            execsql = execsql + singesql;
                        }
                        SqlCommand sqlcommand = new SqlCommand(execsql, sqlcon);
    
                        //计时开始
                        sp.Restart();
                        sqlcommand.ExecuteNonQuery();
                        sp.Stop();
                    }
                }
                Console.WriteLine("方法2:" + sp.ElapsedMilliseconds + "毫秒");
    
    
                //测试方法3
                {
                    using (SqlConnection sqlcon = new SqlConnection("Data Source=.;Initial Catalog=Test;User ID=sa;Password=??"))
                    {
                        sqlcon.Open();
                        SqlBulkCopy sqlc = new SqlBulkCopy(sqlcon);
                        DataTable dt = new DataTable();
                        dt.Columns.Add("id");
                        dt.Columns.Add("name");
                        dt.Columns.Add("age");
    
                        for (int i = 0; i < time; i++)
                        {
                            dt.Rows.Add(38009, "nemw", 123);
                        }
                        sqlc.DestinationTableName = "student";
    
                        //计时开始
                        sp.Restart();
                        sqlc.WriteToServer(dt);
                        sp.Stop();
                    }
                }
                Console.WriteLine("方法3:" + sp.ElapsedMilliseconds + "毫秒");
                Console.WriteLine();
            
            }
        }
    }
    

      

    插入N条数据的测试结果如下:

    效率相差还是很夸张的,大家大量数据插入还是有sqlbulkcopy吧,原理还的高手告知~~

  • 相关阅读:
    lua 学习
    IOS表情存入MYSQL数据库失败
    C# string数组转int数组
    打开端口
    win10下设置IIS、安装php7.2
    NET Core 应用程序 IIS 运行报错 502.3-Gateway
    微信小程序(一)--简单的介绍
    C#socket通信
    使用VScode 的插件
    Vue学习笔记:Slot
  • 原文地址:https://www.cnblogs.com/fatwolf/p/4792214.html
Copyright © 2011-2022 走看看