2013-07-13 3 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 минут.

будет ли это работать или есть какие-то проблемы?

Edit: Как я уже говорил, просто хочу знать, если есть какие-либо временные ограничения, которые будут остановить операцию

+2

чем вопрос? – Ehsan

+0

@ EhsanUllah просто хочу знать, есть ли какие-либо ограничения времени, которые остановят операцию. – Star

+0

Вы имеете в виду время ожидания работы после некоторого времени? См. Это http://www.dbforums.com/microsoft-sql-server/1115272-how-change-query-timeout.html – Ehsan

ответ

0

он будет не тайм-аут, так как вы один SubmitChanges в то время. По сути, это будет делать одну транзакцию для каждой записи.

Так оно будет работать, но оно может быть намного более эффективным.

Переместить создание второго источника данных из цикла. Почему вы даже используете два?

Переместить db2.SubmitChanges(); вне цикла. Это, однако, означает, что вы столкнетесь с проблемами тайм-аута, но это будет быстрее.

Сделайте foreach на db1.tbale1, потому что теперь ваш пропустить + принять сделает его очень неэффективным databasewise. Вы извлекаете по одной записи за раз трудный путь.

PS - Так вы не получаете какое-либо конкретное LINQ-2-SQL преимущества в этом разделе, вы можете также падение LINQ в этой части и использовать SqlBulkCopy и это будет магнитуда быстрее

+0

Ну, это не совсем копирование, но я сделал то, что вы сказали, и это действительно повышает производительность, спасибо. – Star

+0

Вы выбрали SqlBulkCopy или нет? – Pleun

+0

Мне пришлось изменить несколько вещей раньше (новые взгляды на некоторые изменения в коде), затем я использовал его, он повысил производительность, спасибо! – Star

Смежные вопросы