Юваль Лоуи объясняет все очень хорошо и все еще в силе (.Net4). Стоит прочтения. (Я бы также оставил комментарий ... если бы мог.)

о прочитайте эту интересную статью Омара в своем блоге.Linq to SQL решает проблему взаимоблокировки транзакций и времени ожидания запроса с использованием незафиксированных операций чтенияи в конце Джавед Хасан начал спорить с ним о своем решении ситуации с нолоком на большом сайте.

Здесь проблема, которую мы пытаемся решить, заключается в том, что с точки зрения SQL мы должны использовать операторы Select с NOLOCK или использовать SET TRANSACTION LEVEL READ UNCOMMITTED, в противном случае строки большого объема в БД будут заблокированы и вызовут ошибки. Используемая Омаром технология - это Linq2Sql, поэтому вопрос в том, как добиться этого в вашем коде доступа к данным на C #, чтобы вышеописанное не происходило?

В основном в этом посте Омар приходит к своему решению, работая и тестируя на реальных сайтах и ​​используя такие инструменты, как SqlProfiler, тогда как Джавед Хасан приходит к своему решению с документами MSDN, постом Скотта Хансельмана и т. Д.

Омар предлагает использовать следующее

using (var db = new DropthingsDataContext2())
{
  db.Connection.Open();
  db.ExecuteCommand("SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;");

  var user = db.aspnet_Users.First();
  var pages = user.Pages.ToList();
}

тогда как Джавед Хасан предлагает

using (new TransactionScope(TransactionScopeOption.Required, 
  new TransactionOptions { IsolationLevel = IsolationLevel.ReadUncommitted }))
{
 //Your db Operation
}

Мне очень интересно узнать, что вы, ребята, делаете по этому конкретному вопросу на большом сайте, таком как StatckOverflow, или что Джефф и их ребята сделали в этом отношении?

редактироватьПосле прочтения первого поста, я хочу отметить несколько вещей в посте Омара.

он столкнулся с проблемой соединения с его подходом, но он решил ее, см. его пост.что еще более важно он упомянул, что попробовал использовать способ транзакции ADO.NET и даже попробовал то, что Скотт Хансельман написал в своем блоге, но это не работает для сайта большого объема, это несколько снижает производительность. Омар сказал, что «System.Transaction имеет значительные накладные расходы. Я никогда не мог использовать его на больших сайтах без того, чтобы процессор работал на 100%, а Req / sec снижался до 1/10. Это сделано для корпоративных приложений, а не для высоких». объемные сайты. "

Ответы на вопрос(4)

Ваш ответ на вопрос