2013-03-20 99 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(); 
} 

要點是,如果你使用同一交易的一堆插入,而不是每插入一個事務,你會少寫日誌,從而使其更快。