2012-01-27 5 views
6

У меня есть клиентское приложение C#, которое необходимо проверять таблицу на db Postgres каждые 15 минут. Проблема в том, что мне нужно установить этот клиент на более или менее 200 клиентов, поэтому для этого мне нужно закрыть соединение с БД после запроса.Соединение по-прежнему бездействует после закрытия

Я использую метод .Close(), но если я проверю таблицу pg_stat_activity на DB Postgres, я вижу, что соединение все еще открыто в статусе IDLE. Как я могу исправить эту проблему? Можно ли точно установить соединение?

спасибо, Andrea

+0

Хотелось бы понять, если это недействительный статус является проблемой. Мне просто интересно! – Ismael

+0

с максимальным номером подключения до 100 и 200 клиентов, да, это: –

+0

Альтернативный подход к этой же проблеме заключается в том, чтобы 100-200 клиентов подключались к одному серверному приложению, которое вы пишете (возможно, веб-приложение в IIS) , а затем это становится единственным клиентом базы данных. Помимо прочего, он позволяет вам блокировать postgresql намного больше. При таком подходе вы хотите отменить то, что я предлагаю в своем ответе, потому что вы хотите, чтобы объединение включало в себя, что между всеми этими пользователями 100-200 используется несколько соединений. –

ответ

10

Как и большинство провайдеров ADO.NET, Npgsql использует пул соединений по умолчанию. Когда вы Close() объект NpgsqlConnection, внутренний объект, представляющий фактическое базовое соединение, которое использует Npgsql, переводится в пул, который необходимо повторно использовать, сохраняя накладные расходы на создание другого без необходимости. (См. What does "opening a connection" actually mean?).

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

Это вас совсем не устраивает, но если вы включите опцию Pooling=false в свою строку подключения, она переопределит это значение по умолчанию, и Close() действительно закроет фактическое соединение.

+4

Именно по этой причине мне нравится этот сайт! Быстро resposne от очень опытных людей! Спасибо за помощь! –

+0

Есть ли возможность остановить опрос и закрыть все «фоновые» соединения при выключении? –

+0

@ DominicJonas, который должен быть уже при выключении. –