2009-10-29 4 views
11

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

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

ответ

9

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

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

Марк

+0

Спасибо Марк! 1. Означает ли этот параметр, если я включаю этот параметр, тогда я могу использовать асинхронный API из ADO.Net, и если я отключу этот параметр, я не могу использовать асинхронный API из ADO.Net? 2. Если я не использую асинхронный API из ADO.Net, я не уверен, влияет ли этот параметр на мой код, если я не использую асинхронный API из ADO.Net. У меня такое замешательство, потому что я не уверен, использует ли базовый код ADO.Net асинхронную обработку для оптимизации производительности (например, с использованием элемента очереди очереди пула) - так, если я установлю false для этого параметра, будет блокировать базовый код от оптимизации? – George2

+0

(продолжение).), даже если я не использую асинхронный API из кода ADO.Net явно. Любые комментарии к моим двум пунктам? – George2

+2

Насколько я понимаю, этот параметр просто ** позволяет ** использовать асинхронные запросы ADO.NET, но он ничего не делает автоматически. И да - если вы не указали этот параметр, вы ** ** ** сможете использовать асинхронные запросы ADO.NET. –

6

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

Atleast: согласно msdn documentation. На практике, однако, я не видел различий в сценарии SQL 2005 Express с .Net 3.5 SP1.

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

24

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

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

...

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

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

...

0

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

3

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

A: Определенно, используйте только АСИНХРОННЫЙ = TRUE, когда вы знаете, что вы собираетесь использовать функциональные возможности ASync

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

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

+0

Спасибо, что поделились. Я думаю, вы также скептически относились к идее, что это влияет на perf, особенно. поскольку порты ввода-вывода IO являются стандартной практикой для ввода-вывода в Windows по уважительной причине и почему ее значение по умолчанию в 4.5, иначе 'async-await' было бы бессмысленным. –

14

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

Цитата:

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

  1. System.Data. SqlClient.SqlCommand.BeginExecuteNonQuery
  2. System.Data.SqlClient.SqlCommand.BeginExecuteReader
  3. Система .Data.SqlClient.SqlCommand.BeginExecuteReader

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

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

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

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