环境:数据库是dell的服务器,具体配置不详程序执行的服务器为至强64位,server2008 64位,4G内存,其他不详。局域网间通讯要求:一秒写入3000笔数据,间隔3秒,每笔数据位15个decimal(18,2)的数值我现在有试过for循环一条条的插(Linq to SQL)以及生成完整的sql语句后一次性执行(ADO.NET),不过效率都不理想。不是数据库服务器CPU消耗过大( 〉80% ),要么就是写入时间超过3秒有没有什么更好的写入方式?

解决方案 »

  1.   

    可以考虑每次执行 100 条,拼接 100 条语句后再执行,
    这样可以有效减少与 DB Server 之间的往返时间——这恰恰是最能优化的地方之一!100 条仅是随便提的,请 lz 根据具体测试结果调整!
      

  2.   

    可以考虑使用:
    sqlbulkcopy.writetoserver(datatable)参考:DataTable数据批量写入数据库三种方法比较降低CPU占用峰值,可以测试一下一次更新1/10的效果。
      

  3.   


    可以参数我收藏的一篇文章http://blog.csdn.net/Linux7985/archive/2009/03/05/3959716.aspx
    如何高效的将数据导入sqlserver? 6万多数据导入到sql只需要几秒。
      

  4.   

    多线程操作或
    using (SqlConnection con = new SqlConnection(""))
                {
                    con.Open();
                    string sql = "";
                    using (SqlCommand com = new SqlCommand(sql, con))
                    {
                        SqlDataReader dr = com.ExecuteReader();
                        using (SqlConnection connn = new SqlConnection(aa))
                        {
                            connn.Open();
                            SqlBulkCopy BulkCopy = new SqlBulkCopy(connn);
                            BulkCopy.DestinationTableName = "学生";
                            BulkCopy.WriteToServer(dr);
                        }
                    }
                }