2012-01-27 21 views
6

Tengo una aplicación cliente C# que necesita comprobar una tabla en un db Postgres cada 15 minutos. El problema es que necesito instalar este cliente en más o menos 200 clientes, por lo que necesito cerrar la conexión DB después de la consulta.Conexión sigue inactiva después de cerrar

Uso el método .Close() pero, si compruebo en la tabla pg_stat_activity en la base de datos de Postgres, puedo ver que la conexión sigue abierta en el estado IDLE. ¿Cómo puedo solucionar ese problema? ¿Es posible cerrar definitivamente la conexión?

gracias, Andrea

+0

Me gustaría saber si el estado de inactividad es un problema. ¡Tengo curiosidad! – Ismael

+0

con un número máximo de conexión a 100 y 200 clientes, sí, es :) –

+0

Un enfoque alternativo para el mismo problema es tener los 100-200 clientes conectados a una única aplicación de servidor que escriba (tal vez una aplicación web en IIS) , y luego se convierte en el único cliente de la base de datos. Entre otras cosas, te permite bloquear el postgresql mucho más. Con ese enfoque, querrá deshacer lo que sugiero en mi respuesta, porque quiere que la puesta en común signifique que se comparten un puñado de conexiones entre todos esos 100-200 usuarios. –

Respuesta

10

Como la mayoría de los proveedores de ADO.NET, Npgsql utiliza la agrupación de conexiones por defecto. Cuando Close() el objeto NpgsqlConnection, un objeto interno que representa la conexión subyacente real que utiliza Npgsql va a un grupo para ser reutilizado, lo que ahorra la sobrecarga de crear otro innecesariamente. (Ver What does "opening a connection" actually mean? para más información).

Esto se adapta bien a la mayoría de las aplicaciones, ya que es común querer usar una conexión varias veces en el lapso de un segundo.

No le queda nada, pero si incluye la opción Pooling=false en su cadena de conexión, anulará este valor predeterminado, y Close() cerrará la conexión real.

+4

¡Esa es la razón por la que me gusta este sitio web! Resposne rápido de personas muy hábiles! ¡Gracias por la ayuda! –

+0

¿Existe la posibilidad de detener el sondeo y cerrar todas las conexiones de "fondo" al apagarlo? –

+0

@DominicJonas que ya debería ocurrir al apagar. –

Cuestiones relacionadas