Incognita en cierre de conexion a DB..........

29/11/2004 - 00:01 por Nathaly | Informe spam
Un saludo a todos, acudo a ustedes para plantearles una problematica que
tengo con mi aplicacion 3 capas en C#.
Mi aplicacion tiene una capa de datos que basicamente es donde yo realizo
mis conexiones a la DB y ejecuto mis sentencias o querysque retornan mi
informacion a mi capa de negocios...
Mi interrogante es la siguiente, en las clases de mi capa de datos yo
inicialmente :
* Abria la conexion,
* ejecutaba el query
* cerraba la conexion retornando los datos a la capa de negocios
para cada uno de los metodos de mis clases como note que mi aplicacion
se estaba haciendo lenta le heche la culpa a lo que estaba haciendo de abrir
y cerrar conexiones... y opte por lo siguiente:
* Abrir la conexion en el constructor de la clase
* Ejecutar el query en cada metodo
Como ven nunca cierro la conexionporque al instanciar un objeto de mi
clase utilizo varios metodos, por ende no puedo cerrar la conexion a menos
que quiera trabajar con varias instancias del objeto (cosa que no
quiero).imagine que podia cerrar la conexion en el ~ Clase()
(descontructor de mi clase) pero me salen errores
Por el momento no cierro la conexion por ningun lado por que alguien por ahi
me dijo que el garbace colector se encargaba de eso al notar que la conexion
no esta siendo usada(esto es cierto???)
Sigo notando que mi aplicacion se esta volviendo lenta cuanto mas la
construyo(y no es problema de mis procesos porque no son nada
complicados) no se que hacer y tengo miedo que esas conexiones abiertas
me generen mayores problemas a medida que siga desarrollando..

Esperando que alguno de ustedes me puede ayudar con mi problema de si cerrar
o no las conexiones y como hacerlo me despido, no sin antes darles las
gracias de antemano

Saludos,
nathaly

Preguntas similare

Leer las respuestas

#1 David Salgado,MVP
29/11/2004 - 13:29 | Informe spam
Hola Nathaly,

¿ que motor de bbdd utilizas ?
Esta claro que el proceso de crear una conexión es bastante pesado, por lo
que se suele utilizar un
pool para las conexiones ( por eso pregunto lo del motor, pq sql server lo
trae por defecto).
Por otro lado, te recomiendo que le eches un vistazo a la parte de datos de
msdn video ( www.desarrollaconmsdn.com )

Saludos,

David Salgado



"Nathaly" wrote in message
news:
Un saludo a todos, acudo a ustedes para plantearles una problematica que
tengo con mi aplicacion 3 capas en C#.
Mi aplicacion tiene una capa de datos que basicamente es donde yo realizo
mis conexiones a la DB y ejecuto mis sentencias o querysque retornan
mi informacion a mi capa de negocios...
Mi interrogante es la siguiente, en las clases de mi capa de datos yo
inicialmente :
* Abria la conexion,
* ejecutaba el query
* cerraba la conexion retornando los datos a la capa de negocios
para cada uno de los metodos de mis clases como note que mi aplicacion
se estaba haciendo lenta le heche la culpa a lo que estaba haciendo de
abrir y cerrar conexiones... y opte por lo siguiente:
* Abrir la conexion en el constructor de la clase
* Ejecutar el query en cada metodo
Como ven nunca cierro la conexionporque al instanciar un objeto de mi
clase utilizo varios metodos, por ende no puedo cerrar la conexion a menos
que quiera trabajar con varias instancias del objeto (cosa que no
quiero).imagine que podia cerrar la conexion en el ~ Clase()
(descontructor de mi clase) pero me salen errores
Por el momento no cierro la conexion por ningun lado por que alguien por
ahi me dijo que el garbace colector se encargaba de eso al notar que la
conexion no esta siendo usada(esto es cierto???)
Sigo notando que mi aplicacion se esta volviendo lenta cuanto mas la
construyo(y no es problema de mis procesos porque no son nada
complicados) no se que hacer y tengo miedo que esas conexiones
abiertas me generen mayores problemas a medida que siga
desarrollando..

Esperando que alguno de ustedes me puede ayudar con mi problema de si
cerrar o no las conexiones y como hacerlo me despido, no sin antes darles
las gracias de antemano

Saludos,
nathaly

Respuesta Responder a este mensaje
#2 Nathaly
30/11/2004 - 03:20 | Informe spam
pues te dire utilizo postgresql y mysql

Pero segun tu criterio lo que hago esta mal????
y si es asi como lo soluciono...

"David Salgado,MVP" wrote in message
news:
Hola Nathaly,

¿ que motor de bbdd utilizas ?
Esta claro que el proceso de crear una conexión es bastante pesado, por lo
que se suele utilizar un
pool para las conexiones ( por eso pregunto lo del motor, pq sql server lo
trae por defecto).
Por otro lado, te recomiendo que le eches un vistazo a la parte de datos
de
msdn video ( www.desarrollaconmsdn.com )

Saludos,

David Salgado



"Nathaly" wrote in message
news:
Un saludo a todos, acudo a ustedes para plantearles una problematica que
tengo con mi aplicacion 3 capas en C#.
Mi aplicacion tiene una capa de datos que basicamente es donde yo realizo
mis conexiones a la DB y ejecuto mis sentencias o querysque retornan
mi informacion a mi capa de negocios...
Mi interrogante es la siguiente, en las clases de mi capa de datos yo
inicialmente :
* Abria la conexion,
* ejecutaba el query
* cerraba la conexion retornando los datos a la capa de negocios
para cada uno de los metodos de mis clases como note que mi
aplicacion se estaba haciendo lenta le heche la culpa a lo que estaba
haciendo de abrir y cerrar conexiones... y opte por lo siguiente:
* Abrir la conexion en el constructor de la clase
* Ejecutar el query en cada metodo
Como ven nunca cierro la conexionporque al instanciar un objeto de mi
clase utilizo varios metodos, por ende no puedo cerrar la conexion a
menos que quiera trabajar con varias instancias del objeto (cosa que no
quiero).imagine que podia cerrar la conexion en el ~ Clase()
(descontructor de mi clase) pero me salen errores
Por el momento no cierro la conexion por ningun lado por que alguien por
ahi me dijo que el garbace colector se encargaba de eso al notar que la
conexion no esta siendo usada(esto es cierto???)
Sigo notando que mi aplicacion se esta volviendo lenta cuanto mas la
construyo(y no es problema de mis procesos porque no son nada
complicados) no se que hacer y tengo miedo que esas conexiones
abiertas me generen mayores problemas a medida que siga
desarrollando..

Esperando que alguno de ustedes me puede ayudar con mi problema de si
cerrar o no las conexiones y como hacerlo me despido, no sin antes darles
las gracias de antemano

Saludos,
nathaly





Respuesta Responder a este mensaje
#3 Octavio Hernandez
30/11/2004 - 08:06 | Informe spam
Nathaly,

Por el momento no cierro la conexion por ningun lado por que alguien por


ahi
me dijo que el garbace colector se encargaba de eso al notar que la


conexion
no esta siendo usada(esto es cierto???)



Pues debes cerrar la conexión tú tan pronto como dejes de necesitarla; si
no, se irán acumulando las conexiones abiertas (que consumen recursos, tanto
en el cliente como en el servidor de la BD) hasta tanto se dispare el GC. Y
éste se dispara en relación con la escasez de MEMORIA, cosa que generalmente
se produce mucho más tarde que la sobrecarga de la base de datos...

Debes crear un método Cerrar() en tu capa de datos y llamarlo explícitamente
cada vez que termines. Si es una aplicación web, debes abrir y cerrar en
cada llamada. Un try-finally es perfecto para esto.

Salu2 - Octavio
Respuesta Responder a este mensaje
#4 Nathaly
02/12/2004 - 06:49 | Informe spam
HOla octavio lo que me recomiendas es muy valido y cierto sin embargo tengo
una pregunta
como decia inicialmente yo abro la conexion en el constuctor de la clase...
por lo que debo cerrar la conexion en el metodo que se instancia al destruir
el objeto de la clase...
He hecho esto pero me genera errores...
¿Como deberia hacer el cierrre de conexion??

saludos,
nathaly

"Octavio Hernandez" wrote in message
news:%
Nathaly,

Por el momento no cierro la conexion por ningun lado por que alguien por


ahi
me dijo que el garbace colector se encargaba de eso al notar que la


conexion
no esta siendo usada(esto es cierto???)



Pues debes cerrar la conexión tú tan pronto como dejes de necesitarla; si
no, se irán acumulando las conexiones abiertas (que consumen recursos,
tanto
en el cliente como en el servidor de la BD) hasta tanto se dispare el GC.
Y
éste se dispara en relación con la escasez de MEMORIA, cosa que
generalmente
se produce mucho más tarde que la sobrecarga de la base de datos...

Debes crear un método Cerrar() en tu capa de datos y llamarlo
explícitamente
cada vez que termines. Si es una aplicación web, debes abrir y cerrar en
cada llamada. Un try-finally es perfecto para esto.

Salu2 - Octavio


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida