#c# #sql #connection-pooling
#c# #sql #соединение-объединение в пул
Вопрос:
У меня есть простой цикл while, который проверяет базу данных на наличие вставок. Если он находится в цикле слишком долго, мой try catch выдает ошибку «достигнут максимальный размер пула». Итак, в нижней части цикла у меня есть соединение clearallpools()
; Но это все еще не решает проблему.
while (!quit)
{
connection to database strings timeout=400
read from database
connection.clearallpools();
}
Комментарии:
1. Разбейте ваши инструкции на пакеты. Достижение максимального размера пула — это очень плохо.
Ответ №1:
Вероятно, вы не закрываете свои соединения…возможно, вы захотите использовать
while(!quit){
//do something here
using(var connection = GetMyConnection()){
//do your db reads here
}
//do validations and something more here
}
Это гарантирует, что ваши соединения будут удалены / закрыты должным образом.
Кроме того, вам не нужно очищать свои пулы.
Объекты SqlConnection / DbConnection реализуют IDisposable. Возможно, вы захотите пройти через эти
Ответ №2:
Скорее всего, вы продолжаете открывать новые соединения в цикле.
Над циклом откройте инструкцию connection is using
и затем используйте ее в цикле. Также обратите внимание на удаление clearallpools
:
using(create new connection)
{
while (!quit)
{
connection to database strings timeout=400
read from database
// connection.clearallpools(); REMOVE THIS!!!!
}
}
Ответ №3:
Вы исчерпываете пул соединений. После каждого чтения вы должны закрывать соединение, которое вернет его обратно в пул.