2013-03-20 100 views
0

我的软件需要大量的时间来增加约2500行到SQL Server 2008 R2,但我有我不使用交易于2005年的响应速度慢

同样的问题,我不t需要太多的性能,但我不明白为什么时间执行不是恒定的。

每个插入创建新的SqlCommandSqlConnection,池设置为true。

通常插入需要3/4毫秒......但每3/4插入我得到了200毫秒的执行时间!

这意味着我需要更多的200ms插入3或4行。

我正在通过网络从另一台电脑使用sql本地客户端,在本地机器上运行相同的应用程序,它的工作速度快了很多。

+3

为什么每个插入都创建新的SqlConnection?重新使用连接。这一点应该会给你一个体面的表现提升。 – 2013-03-20 20:00:02

+0

有没有区别重用连接或创建新的sqlconnection启用池...尝试两个相同的结果。 – 2013-03-20 20:11:01

+0

听起来好像它可能与“自动关闭”或“自动更新统计信息”选项或自动文件增长有关。您是否尝试过使用['SqlBulkCopy'类](http://msdn.microsoft.com/zh-cn/library/system.data.sqlclient.sqlbulkcopy.aspx)插入数据? – 2013-03-20 20:35:55

回答

0

使用批量插入

我不知道,如果你正在使用MS企业库,你可以这样做:

using (DbConnection connection = db.CreateConnection()) 
{ 
    connection.Open(); 
    DbTransaction transaction = connection.BeginTransaction(); 

    try 
    { 

      // insert a bunch of rows here. You could try to insert all 2500, but that leaves your transaction open for the whole duration. Or you could break it into 100 inserts. Test it out to see what suits your application better. 
      transaction.Commit(); 
    } 
    catch (Exception ex) 
    { 
      transaction.Rollback(); 
    } 
    connection.Close(); 
} 

要点是,如果你使用同一交易的一堆插入,而不是每插入一个事务,你会少写日志,从而使其更快。