亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

.NET批量大數據插入性能分析及比較

2019-11-14 16:03:58
字體:
來源:轉載
供稿:網友

 

數據插入使用了以下幾種方式

1. 逐條數據插入
2. 拼接sql語句批量插入
3. 拼接sql語句并使用Transaction
4. 拼接sql語句并使用SqlTransaction
5. 使用DataAdapter
6. 使用TransactionScope及SqlBulkCopy
7. 使用表值參數

 

數據庫使用SQL Server,腳本如下

 

create table TestTable
(
Id int
,Name nvarchar(20)
)

 

程序中生成測試DataTable結構和測試數據的類如下

[c-sharp] view plaincopyPRint?
1.public class Tools 
2.{ 
3.    public static DataTable MakeDataTable() 
4.    { 
5.        DataTable table = new DataTable(); 
6. 
7.        //生成DataTable的模式(schema)  
8.        table.Columns.Add("Id", Type.GetType("System.Int32")); 
9.        table.Columns.Add("Name", Type.GetType("System.String")); 
10. 
11.        //設置主鍵  
12.        table.PrimaryKey = new DataColumn[] { table.Columns["ID"] }; 
13.        table.Columns["Id"].AutoIncrement = true; 
14.        table.Columns["Id"].AutoIncrementSeed = 1; 
15.        table.Columns["Id"].ReadOnly = true; 
16.        return table; 
17.    } 
18. 
19.    public static void MakeData(DataTable table, int count) 
20.    { 
21.        if (table == null) 
22.            return; 
23. 
24.        if (count <= 0) 
25.            return; 
26. 
27.        DataRow row = null; 
28. 
29.        for (int i = 1; i <= count; i++) 
30.        { 
31.            //創建一個新的DataRow對象(生成一個新行)  
32.            row = table.NewRow(); 
33.            row["Name"] = "Test" + i.ToString(); 
34.            //添加新的DataRow  
35.            table.Rows.Add(row); 
36.        } 
37.    } 
38.} 
    public class Tools
    {
        public static DataTable MakeDataTable()
        {
            DataTable table = new DataTable();

            //生成DataTable的模式(schema)
            table.Columns.Add("Id", Type.GetType("System.Int32"));
            table.Columns.Add("Name", Type.GetType("System.String"));

            //設置主鍵
            table.PrimaryKey = new DataColumn[] { table.Columns["ID"] };
            table.Columns["Id"].AutoIncrement = true;
            table.Columns["Id"].AutoIncrementSeed = 1;
            table.Columns["Id"].ReadOnly = true;
            return table;
        }

        public static void MakeData(DataTable table, int count)
        {
            if (table == null)
                return;

            if (count <= 0)
                return;

            DataRow row = null;

            for (int i = 1; i <= count; i++)
            {
                //創建一個新的DataRow對象(生成一個新行)
                row = table.NewRow();
                row["Name"] = "Test" + i.ToString();
                //添加新的DataRow
                table.Rows.Add(row);
            }
        }
    }

 

 

 

使用Log4net記錄日志,默認插入記錄數為40000條,每次插入1條,可在界面修改,使用System.Diagnostics.StopWatch記錄插入時間,每次測試后刪除原表重建

 

窗體代碼如下:

 

[c-sharp] www.nuoya118.com
  1. public delegate bool InsertHandler(DataTable table, int batchSize);  
  2.   
  3. public partial class FrmBatch : Form  
  4. {  
  5.     private Stopwatch _watch = new Stopwatch();  
  6.   
  7.     public FrmBatch()  
  8.     {  
  9.         InitializeComponent();  
  10.     }  
  11.   
  12.     private void FrmBatch_Load(object sender, EventArgs e)  
  13.     {  
  14.         txtRecordCount.Text = "40000";  
  15.         txtBatchSize.Text = "1";  
  16.     }  
  17.   
  18.     //逐條數據插入   
  19.     private void btnInsert_Click(object sender, EventArgs e)  
  20.     {  
  21.         Insert(DbOperation.ExecuteInsert, "Use SqlServer Insert");  
  22.     }  
  23.   
  24.     //拼接sql語句插入   
  25.     private void btnBatchInsert_Click(object sender, EventArgs e)  
  26.     {  
  27.         Insert(DbOperation.ExecuteBatchInsert, "Use SqlServer Batch Insert");  
  28.     }  
  29.   
  30.     //拼接sql語句并使用Transaction   
  31.     private void btnTransactionInsert_Click(object sender, EventArgs e)  
  32.     {  
  33.         Insert(DbOperation.ExecuteTransactionInsert, "Use SqlServer Batch Transaction Insert");  
  34.     }  
  35.   
  36.     //拼接sql語句并使用SqlTransaction   
  37.     private void btnSqlTransactionInsert_Click(object sender, EventArgs e)  
  38.     {  
  39.         Insert(DbOperation.ExecuteSqlTransactionInsert, "Use SqlServer Batch SqlTransaction Insert");  
  40.     }  
  41.   
  42.     //使用DataAdapter   
  43.     private void btnDataAdapterInsert_Click(object sender, EventArgs e)  
  44.     {  
  45.         Insert(DbOperation.ExecuteDataAdapterInsert, "Use SqlServer DataAdapter Insert");  
  46.     }  
  47.   
  48.     //使用TransactionScope   
  49.     private void btnTransactionScopeInsert_Click(object sender, EventArgs e)  
  50.     {  
  51.         Insert(DbOperation.ExecuteTransactionScopeInsert, "Use SqlServer TransactionScope Insert");  
  52.     }  
  53.   
  54.     //使用表值參數   
  55.     private void btnTableTypeInsert_Click(object sender, EventArgs e)  
  56.     {  
  57.         Insert(DbOperation.ExecuteTableTypeInsert, "Use SqlServer TableType Insert");  
  58.     }  
  59.   
  60.     private DataTable InitDataTable()  
  61.     {  
  62.         DataTable table = Tools.MakeDataTable();  
  63.         int count = 0;  
  64.         if (int.TryParse(txtRecordCount.Text.Trim(), out count))  
  65.         {  
  66.             Tools.MakeData(table, count);  
  67.             //MessageBox.Show("Data Init OK");   
  68.         }  
  69.         return table;  
  70.     }  
  71.   
  72.     public void Insert(InsertHandler handler, string msg)  
  73.     {  
  74.         DataTable table = InitDataTable();  
  75.         if (table == null)  
  76.         {  
  77.             MessageBox.Show("DataTable is null");  
  78.             return;  
  79.         }  
  80.   
  81.         int recordCount = table.Rows.Count;  
  82.         if (recordCount <= 0)  
  83.         {  
  84.             MessageBox.Show("No Data");  
  85.             return;  
  86.         }  
  87.   
  88.         int batchSize = 0;  
  89.         int.TryParse(txtBatchSize.Text.Trim(), out batchSize);  
  90.         if (batchSize <= 0)  
  91.         {  
  92.             MessageBox.Show("batchSize <= 0");  
  93.             return;  
  94.         }  
  95.   
  96.         bool result = false;  
  97.         _watch.Reset(); _watch.Start();  
  98.         result = handler(table, batchSize);  
  99.         _watch.Stop(www.nuoya66.com);  
  100.         string log = string.Format("{0};RecordCount:{1};BatchSize:{2};Time:{3};", msg, recordCount, batchSize, _watch.ElapsedMilliseconds);  
  101.         LogHelper.Info(log);  
  102.         MessageBox.Show(result.ToString());  
  103.     }  
  104. }  

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久精品视频在线| 国产乱人伦真实精品视频| 国产一区二区成人| 69国产精品成人在线播放| 亚洲一区二区在线| 亚洲天堂成人在线视频| 色狠狠av一区二区三区香蕉蜜桃| 亚洲国产精品成人一区二区| 韩国精品美女www爽爽爽视频| 国产欧美一区二区三区在线| 久久久久久久久91| 久久成人综合视频| 国产欧美精品一区二区三区-老狼| 亚洲视频欧美视频| 91欧美日韩一区| 最近2019中文免费高清视频观看www99| 日韩成人在线电影网| 精品中文字幕在线| 在线视频日本亚洲性| 中文字幕亚洲图片| 亚洲区bt下载| 一级做a爰片久久毛片美女图片| 欧美高清视频在线| 国产精品久久久久秋霞鲁丝| 91免费的视频在线播放| 亚洲小视频在线观看| 午夜欧美不卡精品aaaaa| 久久99精品久久久久久青青91| 91九色单男在线观看| 欧美中文在线字幕| 91在线高清免费观看| 欧美日韩中国免费专区在线看| 欧美华人在线视频| 亚洲第一级黄色片| 91在线观看免费| 国产99视频在线观看| 日韩www在线| 亚洲成色777777在线观看影院| 亚州成人av在线| 国产精品成久久久久三级| 在线观看国产欧美| 亚洲区在线播放| 国产日韩精品入口| 亚洲国产私拍精品国模在线观看| 在线观看欧美成人| 久久精品国产精品| 国产精品成av人在线视午夜片| 久久久av亚洲男天堂| 欧美黑人xxxx| 中文字幕最新精品| 九九久久精品一区| 美女精品久久久| 久久影院模特热| 中文字幕亚洲自拍| 国产福利视频一区| 欧美乱妇40p| 精品国产一区二区三区久久久狼| 亚洲国产天堂久久综合网| 欧美激情亚洲自拍| 大桥未久av一区二区三区| 日韩高清欧美高清| 亚洲第一网站免费视频| 亚洲视频在线播放| 国产香蕉精品视频一区二区三区| 亚洲午夜小视频| 国产精品视频网| 2021久久精品国产99国产精品| 久久久国产精品一区| 日韩精品亚洲元码| 热久久视久久精品18亚洲精品| 日韩av免费一区| 亚洲毛片一区二区| 亚洲第一精品福利| 欧美午夜视频一区二区| 成人免费看片视频| 国产精品毛片a∨一区二区三区|国| 欧美肥臀大乳一区二区免费视频| 精品中文视频在线| 日韩av不卡在线| 色妞色视频一区二区三区四区| 亚洲精品国精品久久99热一| 久久久噜噜噜久久中文字免| 久久久成人av| 精品亚洲一区二区三区在线播放| 国产精品久久久久77777| 精品视频一区在线视频| 亚洲欧洲日本专区| 91av视频在线| 中文字幕日韩精品有码视频| 欧美一级大片在线观看| 国产精品视频白浆免费视频| 97精品国产aⅴ7777| 成人综合国产精品| 色噜噜国产精品视频一区二区| 91精品视频播放| 欧美精品videofree1080p| 久久亚洲私人国产精品va| 91在线观看免费高清完整版在线观看| 亚洲最大激情中文字幕| 91久久精品国产91久久性色| 国产大片精品免费永久看nba| 久久中文字幕视频| 亚洲伊人成综合成人网| 精品久久久久久中文字幕一区奶水| 性金发美女69hd大尺寸| 国产精品视频网址| 亚洲乱码国产乱码精品精| 日韩免费高清在线观看| 国产精品久久久久久久美男| 3344国产精品免费看| 日韩欧美大尺度| 97人人做人人爱| 国内精品400部情侣激情| 亚洲精品日韩丝袜精品| 亚洲第一精品夜夜躁人人爽| 成人伊人精品色xxxx视频| 欧美人交a欧美精品| 欧美劲爆第一页| 亚洲第一黄色网| 日韩在线观看免费全集电视剧网站| 日韩成人av一区| 欧美日韩在线看| 亚洲国产成人久久综合一区| 日韩大片在线观看视频| 国产精品香蕉在线观看| 亚洲人成欧美中文字幕| 亚洲成人动漫在线播放| 亚洲精品日产aⅴ| 亚洲性视频网站| 视频在线观看一区二区| 青青青国产精品一区二区| 欧美亚洲国产精品| 久久精品国产亚洲精品2020| 久久精品亚洲热| 亚洲精选中文字幕| 91探花福利精品国产自产在线| 欧美有码在线视频| 91精品国产一区| 日韩视频在线免费| 久久久久成人精品| 国产精品偷伦免费视频观看的| 日产日韩在线亚洲欧美| 精品国产自在精品国产浪潮| 精品亚洲一区二区三区在线播放| 九九热最新视频//这里只有精品| 亚洲视频欧洲视频| 亚洲精品日韩欧美| 亚洲欧美精品伊人久久| 91免费看片网站| 国产精品久久久久不卡| 中文字幕精品av| 欧美成人一区在线| 国产成+人+综合+亚洲欧美丁香花| 日韩国产高清污视频在线观看| 久久久在线免费观看| 啪一啪鲁一鲁2019在线视频| 国产成人精品一区二区三区| 亚洲国产精品电影| 中文字幕久热精品在线视频| 亚洲午夜精品久久久久久久久久久久| 亚洲自拍偷拍色图| 亚洲欧美日韩一区二区在线| 久久久免费在线观看| 黑人巨大精品欧美一区二区|