Получение SQL-соединения наиболее эффективно при использовании ASP.NET и веб-сервисов.

При использовании веб-служб (в частности, asmx и WCF) с ASP.NET, как лучше всего установить соединение SQL? Прямо сейчас я устанавливаю новое соединение для каждого вызова веб-службы, но я не уверен, что это будет слишком эффективно, когда будут подключаться тысячи пользователей. Любое понимание этой темы будет высоко оценено.


person MacGyver    schedule 14.09.2012    source источник
comment
+1 Это правильный вопрос. Если вы проголосовали против, пожалуйста, укажите причину.   -  person Win    schedule 14.09.2012


Ответы (4)


То, что вы делаете, довольно стандартно.

Предполагая, что вы используете такую ​​же строку соединения, соединения будут исходить из пула соединений, что уже является наиболее эффективным способом получения соединений.

Хорошей практикой является выполнение только необходимой работы и закрытие соединения при каждом вызове.

Одна вещь, которую вы можете сделать, — это кэшировать результаты и возвращать кэшированные результаты для вызовов, которые вряд ли приведут к изменению данных в течение срока службы элемента кэша. Это уменьшит количество обращений к базе данных.

person Oded    schedule 14.09.2012

Настоятельно рекомендуется всегда закрывать соединение после завершения его использования, чтобы соединение возвращалось в пул. Это можно сделать с помощью методов Close или Dispose объекта Connection или путем открытия всех соединений внутри оператора using в C#. Соединения, которые не закрыты явно, не могут быть добавлены или возвращены в пул.

Вы должны добавить «Pooling = true» (и добавить ненулевой «Min Pool Size») в строку подключения.

person Nitesh Kumar    schedule 14.09.2012

Позвольте провайдеру обрабатывать пул соединений для вас; не пытайтесь сделать лучше, чем это - вы потерпите неудачу.

С настройками соединения по умолчанию провайдер будет поддерживать пул соединений. Когда вы закрываете/распоряжаетесь, соединение фактически просто высвобождается в пул. это не обязательно действительно закрыто.

person Andrew Barber    schedule 14.09.2012

По умолчанию SqlConnections использует пул соединений, что позволяет системе управлять повторным использованием объектов предыдущих соединений, а не создавать «новые» соединения для каждого запроса — вплоть до максимального значения пула. . И он встроен, поэтому вам не нужно ничего делать, чтобы использовать его.

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

person David W    schedule 14.09.2012