Строка подключения к SQL Server Асинхронная обработка = true - PullRequest
13 голосов
/ 29 октября 2009

Я использую .Net 2.0 + SQL Server 2005 Enterprise + VSTS 2008 + C # + ADO.Net для разработки веб-приложения ASP.Net.

У меня вопрос: если я использую Asynchronous Processing=true в режиме аутентификации SQL Server (а не в режиме аутентификации Windows, т.е. с использованием учетной записи и пароля sa в строке подключения в web.config), мне интересно, повлияет ли Asynchronous Processing=true на производительность моего веб-приложения (или зависит от моего шаблона / сценария реализации кода ADO.Net)? А почему?

Ответы [ 6 ]

26 голосов
/ 21 октября 2011

На самом деле, при включении этой опции возникают проблемы с производительностью; см. часто задаваемые вопросы ADO.NET 2.0 по асинхронному выполнению команд (ASYNC) :

В: Что такое новая функция асинхронного выполнения команд ADO.NET 2.0.
A: ASYNC позволяет выполнять команду неблокирующим образом. Мы представляем в SqlCommand следующие асинхронные методы: BeginExecuteNonQuery, BeginExecuteReader и BeginExecuteXmlReader с опросом, синхронизацией и ( дрожь ) обратными вызовами.

...

В: Значит ли это, что каждая команда, которую я выполняю (синхронная или асинхронная), будет происходить в режиме перекрытия, когда я добавлю ASYNC = TRUE в строку подключения?
A: Да, это так, все , которое мы выполняем для этого соединения, будет выполнено в режиме перекрытия. Для синхронных операций мы внутренне ждем завершения перед возвратом, в основном мы имитируем синхронное поведение в этом соединении. По этой причине нам требуется ключевое слово строки подключения.

Q: Это оказывает перфектное влияние?
A: Определенно, используйте ASYNC = TRUE только тогда, когда вы знаете, что собираетесь использовать асинхронные функции.

...

21 голосов
/ 16 июня 2013

Начиная с .NET Framework 4.5, свойство асинхронной обработки игнорируется, поэтому включать его нет необходимости.

Цитата:

До .NET Framework 4.5 асинхронное программирование с SqlClient было сделано с помощью следующих методов и асинхронных Обработка = истинное свойство соединения:

  1. System.Data.SqlClient.SqlCommand.BeginExecuteNonQuery
  2. System.Data.SqlClient.SqlCommand.BeginExecuteReader
  3. System.Data.SqlClient.SqlCommand.BeginExecuteReader

Эта функциональность сохраняется в SqlClient в .NET Framework 4.5.

Начиная с .NET Framework 4.5, эти методы больше не требуют Асинхронная обработка = true в строке подключения.

Для получения дополнительной информации см. Ссылки ниже:

8 голосов
/ 29 октября 2009

Наличие Asynchronous Processing=True в строке подключения просто позволяет вам писать асинхронные запросы - я не понимаю, как использование этого параметра в строке подключения может повлиять на вашу производительность, если вы ничего не измените.

Мы надеемся, что вы начнете видеть положительное влияние на производительность, когда начнете выполнять асинхронную обработку запросов к базе данных. Но просто указав, что один из вариантов не должен иметь (положительного или отрицательного) влияния на ваше приложение.

Марк

6 голосов
/ 19 октября 2011

Вопреки тому, что говорит принятый ответ, на самом деле влияет на производительность .

Atleast: согласно документации msdn . Однако на практике я не смог увидеть никакой разницы в сценарии SQL 2005 Express с .Net 3.5 SP1.

Поскольку MSDN docs предупреждает об этом, я подумал, что это будет интересно для дальнейшего использования.

3 голосов
/ 06 мая 2013

Я только что проверил производительность sync вызовов базы данных с ASYNC = TRUE и ASYNC = FALSE. Я был обеспокоен:

A: Определенно, используйте ASYNC = TRUE, только когда вы знаете, что собираетесь использовать асинхронную функциональность

Могу сказать, что производительность точно такая же . Я тестировал веб-роль Azure при высокой нагрузке и рассчитывал среднее значение для большого числа запросов.

Таким образом, если ваше приложение использует различные типы запросов к базе данных (синхронизация и асинхронность), вы можете свободно установить Asynchronous Processing=true и использовать это соединение для синхронизации и асинхронных запросов. Полагаю, это также уменьшит ваш пул соединений.

0 голосов
/ 05 мая 2012

Вот список, который содержит класс, помогающий изменить строки подключения, чтобы гарантировать, что они устанавливают Асинхронную обработку = True: https://gist.github.com/2597691

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...