Соединение все еще бездействует после закрытия - PullRequest
12 голосов
/ 27 января 2012

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

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

спасибо, Андреа

1 Ответ

16 голосов
/ 27 января 2012

Как и большинство поставщиков ADO.NET, Npgsql по умолчанию использует пул соединений. Когда вы Close() объект NpgsqlConnection, внутренний объект, представляющий фактическое базовое соединение, которое использует Npgsql, переходит в пул для повторного использования, что экономит накладные расходы на создание другого без необходимости. (См. Что на самом деле означает «открытие соединения»? для более подробной информации.)

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

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

...