Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   ASPX (.net) (http://www.forosdelweb.com/f78/)
-   -   El método close no se refleja en SQL Server (http://www.forosdelweb.com/f78/metodo-close-no-refleja-sql-server-434294/)

_Puma_ 14/10/2006 13:23

El método close no se refleja en SQL Server
 
¡Hola!

El problema es el siguiente.

Hemos desarrollado una aplicación web ASP.NET usando SQL Server 2000 y estamos experimentando problemas de rendimiento. Al verificar la información de procesos vía Enterprise Manager (o al ejecutar sp_who) vemos que el número de procesos se incrmenta gradualmente hasta saturar el servidor; el estatus de dichos procesos se mantiene en Sleeping.

He escrito el siguiente código para probar el cierre de conexión:

Dim Cnn As New SqlConnection("Cadena de conexion")
Dim Cmd As New SqlCommand("SELECT ...", Cnn)
Dim Rst As SqlDataReader
Cmd.Connection.Open()
rst = Cmd.ExecuteReader(CommandBehavior.CloseConnection)
rst.close

Notamos lo siguiente:
1.- Al llegar a la instrucción de apertura de conexión de inmediato vemos reflejada la conexión en el Servidor de SQL.
2.- Después de pasar por el método close el proceso se sigue viendo en el Servidor de SQL, incluso cuando la aplicación ha terminado; el estado en el que permanece es Sleeping.
3.- El proceso sigue vivo en el server de SQL incluso agregando el cierre de conexión de manera explícita.
4.- Esto sucede incluso cuando se usa un adaptador y un dataset.

¿Qué sucede?
¿ADO.NET no le avisa al IIS que cierre la conexión?
¿IIS no le informa a SQL Server que la cierre?
¿Lo que estamos viendo en SQL son sesiones huérfanas?

Espero me puedan ayudar. Saludos y gracias de antemano.

Developer9 14/10/2006 14:48

:risa: :risa: :risa: :risa: :risa: :risa:

Te falta cerrar la conexion :-D

Developer9 14/10/2006 14:50

Ya :serio:

Cita:

Iniciado por _Puma_ (Mensaje 1737536)
Dim Cnn As New SqlConnection("Cadena de conexion")
Dim Cmd As New SqlCommand("SELECT ...", Cnn)
Dim Rst As SqlDataReader
Cmd.Connection.Open()
rst = Cmd.ExecuteReader(CommandBehavior.CloseConnection)
rst.close

Algunas pistas... Tienes dos variables Cnn y Cmd... por allí como que te falta cerrar una de ellas :-D

_Puma_ 16/10/2006 07:40

Según la documentación al utilizar "CommandBehavior.CloseConnection" la conexión utilizada se cierra en automático, de cualquier forma el problema persiste aún cuando se hace:
Cnn.close
Cnn.Dispose
Cmd.Dispose
Cnn = nothing
Cmd = Nothing

JocDev 16/10/2006 08:53

Yo tuve el mismo problema. Solucione utilizando la clase SQLHelper para hacer las consultas solo asi pude eliminar las conexiones que se quedaban por cada consulta.


La zona horaria es GMT -6. Ahora son las 20:49.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.