#c# #asp.net #networking
#c# #asp.net #сеть
Вопрос:
Я не знаю, что это за ошибка.. Я больше не могу открыть свой сайт
Server Error in '/site' Application.
Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.
пожалуйста, помогите мне .. tnx
Комментарии:
1. Ваш сайт находится на общем сервере (совместно используемом с другими сайтами) или сам по себе?
2. Вы ведь разрабатывали сайт, верно?
Ответ №1:
10 советов по написанию высокопроизводительных веб-приложений
Пул соединений
Настройка TCP-соединения между вашим веб-приложением и SQL Server ™ может быть дорогостоящей операцией. Разработчики из Microsoft уже некоторое время могут использовать преимущества пула подключений, что позволяет им повторно использовать подключения к базе данных.
Всегда закрывайте свои подключения, когда вы закончите с ними. Не доверяйте common language runtime (CLR) для очистки и закрытия вашего соединения за вас в заранее определенное время. Среда CLR в конечном итоге уничтожит класс и принудительно закроет соединение, но у вас нет гарантии, когда сборка мусора на объекте действительно произойдет.
Чтобы оптимально использовать пул соединений, необходимо соблюдать несколько правил. Сначала откройте соединение, выполните работу, а затем закройте соединение. При необходимости можно открывать и закрывать соединение несколько раз при каждом запросе (оптимально применять совет 1), а не оставлять соединение открытым и передавать его разными методами. Во-вторых, используйте ту же строку подключения (и тот же идентификатор потока, если вы используете встроенную аутентификацию). Если вы не используете ту же строку подключения, например, настраивая строку подключения на основе вошедшего в систему пользователя, вы не получите то же значение оптимизации, что и при объединении в пул соединений. И если вы используете встроенную аутентификацию, выдавая себя за большой набор пользователей, ваш пул также будет намного менее эффективным. Счетчики производительности данных .NET CLR могут быть очень полезны при попытке отследить любые проблемы с производительностью, связанные с объединением в пул соединений. Всякий раз, когда ваше приложение подключается к ресурсу, такому как база данных, запущенному в другом процессе, вам следует оптимизировать, сосредоточив внимание на времени, затраченном на подключение к ресурсу, время, затраченное на отправку или извлечение данных, и количество циклов. Оптимизация любого вида перехода процесса в вашем приложении — это первое, с чего следует начать для достижения лучшей производительности.
Комментарии:
1. Копирование всего этого текста является плагаризмом. Просто оставьте ссылку.
2. @Aliostad — я думаю, что это так .. но думаю, что лучше вставить ссылку contenet, чтобы он мог легко получить больше информации
3. Просто приведите небольшой фрагмент текста и оформите его как цитату. Я еще раз рассмотрю свой отрицательный отзыв.
Ответ №2:
Истек тайм-аут (что-то заняло больше времени, чем следовало). В частности, период таймаута истек до получения соединения из пула соединений. Оказывается, это могло произойти из-за того, что использовались все объединенные соединения и был достигнут максимальный размер пула.
(Вы используете пул соединений и, вероятно, не закрываете свои соединения. После того, как вы закончите с SqlConnection
или подобным объектом подключения, вызовите .Close()
его)
Комментарии:
1. Не будет ли эта ошибка больше связана с распределением потоков в IIS, чем с подключениями к БД?
2. Проверьте свой код: вы оставляете соединения открытыми. Закройте их, когда закончите, перекомпилируйте, повторно разверните.
3. @Jon — нет, там нет ничего общего с IIS: речь идет о пуле соединений. Тот факт, что это отображается в веб-браузере, объясняется просто тем, что это веб-приложение
4. Как вам помочь? Проблема в том, что ваш код оставляет открытыми соединения с базой данных. Решение этой проблемы заключается в том, что вам нужно закрыть их. Вот и ответ!!