Unhandled exception: System.InvalidOperationException: Тайм-аут истёк. Тайм-аут истёк, но соединение ещё не снято из пула. Возможно, это связано с тем, что все соединения бассейнов уже используются и достигнут максимальный размер пула.
Это может происходить потому, что все соединения пула используются и достигается максимальный размер пула.
Решение:
Первое, что нужно сделать — закрыть соединение сразу после использования. Если соединение не закрыто, оно сохраняется в пуле соединений, и известно, что GC уничтожен. В этом случае вы считаете, что пул соединений не достиг максимального значения, но на самом деле пул соединений достиг максимального значения; во-вторых, можно использовать Max Pool Size = N в строке соединения; для динамического увеличения максимального количества соединений в пуле соединений.
Иллюстрировать:
То есть, если значение максимального размера пула не указано в строке connectionString,Тогда максимальный размер пула=100Если количество посетителей базы данных составляет 101, приведённая выше ошибка появится, если после ожидания времени, установленного SqlConnection.ConnectionTimeout (по умолчанию — 15 секунд) всё ещё нет доступного соединения.
Когда мы возьмёмся на:
Если количество посетителей, подключённых к базе данных одновременно, составляет 513, вышеописанная ошибка возникнет, если после ожидания установленного SqlConnection.ConnectionTimeout времени (по умолчанию 15 секунд) всё ещё нет доступного соединения.
|