摘要:使用.net相关技术向数据库中插入海量数据是常用操作。本文对比ado.net和linq两种技术,分别使用sqlbulkcopy()和insertallonsubmit()方法进行操作。得出结论:相同插入工作量(1w条数据)插入效率相差200倍之巨! 测试场景: 准备两个数据库testdb和tes
        		摘要:使用.net相关技术向数据库中插入海量数据是常用操作。本文对比ado.net和linq两种技术,分别使用sqlbulkcopy()和insertallonsubmit()方法进行操作。得出结论:相同插入工作量(1w条数据)插入效率相差200倍之巨!
测试场景:
准备两个数据库testdb和testdb2,有表:t_users。表结构如下图所示:
sqlbulkcopy()插入方法如下:
private static stopwatch insertusingsqlbulkcopy(list list)        {            stopwatch stopwatch = new stopwatch();            stopwatch.start();            datatable dt = new datatable();            dt.columns.add(id);            dt.columns.add(username);            for (int i = 0; i < list.count; i++)            {                datarow row = dt.newrow();                row[id] = list[i].id;                row[username] = list[i].username;                dt.rows.add(row);            }            using (sqlconnection con = new sqlconnection(connstr2))            {                con.open();                using (sqlbulkcopy bulkcopy = new sqlbulkcopy(con))                {                    try                    {                        bulkcopy.destinationtablename = dbo.t_username;                        bulkcopy.columnmappings.add(id, id);                        bulkcopy.columnmappings.add(username, username);                        bulkcopy.writetoserver(dt);                    }                    catch (exception ex)                    {                        console.writeline(ex.tostring());                    }                    finally { con.close(); }                }            }            stopwatch.stop();            return stopwatch;        }
linq插入方法如下所示:
private static stopwatch insertusinglinq(list _list)        {            stopwatch stopwatch = new stopwatch();            stopwatch.start();            dataclasses1datacontext datacontext = new dataclasses1datacontext();            datacontext.t_users.insertallonsubmit(_list);            datacontext.submitchanges();            stopwatch.stop();            return stopwatch;        }
使用上述代码分别导入1万条user数据进入数据库。
得到结果如下图所示:
相同插入工作量(1w条数据)前提下,结论:
1 ado.net下sqlbulkcopy()方法是linq to sql下insertallonsubmit()方法插入效率相差266倍之巨!
2  linq使用便捷、代码简短、学习成本低,语言表达优雅;但是,如果对效率要求较高的海量数据相关操作优先推荐使用ado.net方法。
相关源码下载地址:http://download.csdn.net/detail/fanrong1985/8130953
   
 
   