Foros del Web » Programando para Internet » ASPX (.net) »

El método close no se refleja en SQL Server

Estas en el tema de El método close no se refleja en SQL Server en el foro de ASPX (.net) en Foros del Web. ¡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 ...
  #1 (permalink)  
Antiguo 14/10/2006, 13:23
 
Fecha de Ingreso: abril-2005
Mensajes: 4
Antigüedad: 19 años, 8 meses
Puntos: 0
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.
  #2 (permalink)  
Antiguo 14/10/2006, 14:48
Avatar de Developer9
(Desactivado)
 
Fecha de Ingreso: abril-2005
Ubicación: Mi Ecuador del alma
Mensajes: 4.196
Antigüedad: 19 años, 9 meses
Puntos: 47


Te falta cerrar la conexion
  #3 (permalink)  
Antiguo 14/10/2006, 14:50
Avatar de Developer9
(Desactivado)
 
Fecha de Ingreso: abril-2005
Ubicación: Mi Ecuador del alma
Mensajes: 4.196
Antigüedad: 19 años, 9 meses
Puntos: 47
Ya

Cita:
Iniciado por _Puma_ Ver Mensaje
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
  #4 (permalink)  
Antiguo 16/10/2006, 07:40
 
Fecha de Ingreso: abril-2005
Mensajes: 4
Antigüedad: 19 años, 8 meses
Puntos: 0
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
  #5 (permalink)  
Antiguo 16/10/2006, 08:53
 
Fecha de Ingreso: noviembre-2004
Ubicación: Asuncion - Paraguay
Mensajes: 155
Antigüedad: 20 años, 2 meses
Puntos: 0
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.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:52.