2013-07-13 19 views
0

我有我需要使用C#來運行一次的操作:很長一段時間運行DB操作

它要複雜得多下面的代碼,但仍 是這樣的:

using (DB1DataContext db1 = new DB1DataContext()) 
{ 
    int count = db1.tbale1.Count(); 
    int currentIndex = 0; 
    while (currentIndex < count) 
    { 
     var obj= db1.table1s.Take(1).Skip(currentIndex).FirstOrDefault(); 
     using (DB2DataContext db2 = new DB2DataContext()) 
     { 
      tableA tb = new table1(); 
      db2.tableAs.InsertOnSubmit(tb); 
      db2.SubmitChanges(); 
     } 
     currentIndex++; 
    }  
} 

一個循環大約需要500毫秒,循環次數約爲15000次,這意味着操作大約需要125分鐘。

這個工作還是會出現某種問題?

編輯:正如我之前提到的只是想知道是否有任何時間限制,將停止運轉

+2

有什麼問題嗎? – Ehsan

+0

@EhsanUllah只是想知道是否有任何時間限制,將停止運行 – Star

+0

你是否會在某段時間後操作超時?請參閱http://www.dbforums.com/microsoft-sql-server/1115272-how-change-query-timeout.html – Ehsan

回答

0

它將超時,因爲你做一次一個的SubmitChanges。基本上,這將爲每條記錄執行一次交易。

所以它會工作,但它可以更有效。

將第二個datacontext的創建移出循環。爲什麼你甚至使用兩個?

移動db2.SubmitChanges();跳出循環。但是,這意味着你會遇到超時問題,但速度會更快。

對db1.tbale1執行foreach,因爲現在您的skip + take會使數據庫非常低效。您一直在以艱辛的方式獲取一條記錄。

PS - 既然你是不是在本節得到任何具體的LINQ-2-SQL的好處,你不妨在這部分下降LINQ和使用SqlBulkCopy的,這將是幅度更快

+0

嗯,這不是很複製,但我做了你所說的,它確實提高了性能,謝謝。 – Star

+0

您是否選擇了SqlBulkCopy? – Pleun

+0

我不得不改變一些事情(新的觀點對代碼進行了一些更改)然後我使用它,它確實提高了性能,謝謝! – Star

相關問題