Есть ли что-нибудь неправильно с обертыванием процесса, который занимает три часа, чтобы работать в TransactionScope, как это:Сделка открыта в течение многих часов
Dim transactionOptions As TransactionOptions = New TransactionOptions()
Using scope As New TransactionScope(TransactionScopeOption.Required, transactionOptions)
msgbox("Message Box 1")
scope.complete()
End Using
msgbox("Message Box 2")
Чтобы получить из сообщения Box 1 к Message Box 2 занимает около пяти часов.
Уверен, что я пробовал это в прошлом с еще одним длительным процессом, и транзакция продолжала время (я мог ошибаться), поэтому я выполнял на каждом цикле. Я где-то читал, что вы должны совершать как можно чаще. Что-то не так с моим подходом?
Если у вас есть транзакция, которая длится пять часов, у вас возникнут большие проблемы с вашим дизайном. –
@Matt Wilko, что произойдет, если у вас есть программа, проходящая через один миллиард записей, и каждый занимает одну долю секунды для запуска ? Думаю, вы скажете; зафиксировать в каждом цикле. – w0051977
Во-первых, вы должны спросить, почему вы это делаете. Добавьте предложение WHERE, чтобы уменьшить объем данных, которые вы читаете. Seconly Чтение данных не должно быть частью транзакции, только вставлять/обновлять/удалять, поэтому запустите транзакцию непосредственно перед этим. Возможно, вам придется реорганизовать свой код, чтобы сначала получить список записей для обновления, прежде чем делать обновления. –