Foros del Web » Programando para Internet » ASP Clásico »

rs.close vs rs = nothing

Estas en el tema de rs.close vs rs = nothing en el foro de ASP Clásico en Foros del Web. Hola, alguien sabe si estas dos sentencias hacen lo mismo o deben ir juntas? rs.close set rs = nothing Es decir, si solo pongo close, ...
  #1 (permalink)  
Antiguo 24/07/2007, 13:10
 
Fecha de Ingreso: mayo-2004
Mensajes: 189
Antigüedad: 20 años
Puntos: 1
rs.close vs rs = nothing

Hola, alguien sabe si estas dos sentencias hacen lo mismo o deben ir juntas?

rs.close
set rs = nothing

Es decir, si solo pongo close, el recurso se libera? o debo poner la otra sentencia tambien? o debo poner las dos? o con solo poenr nothing ya esta?

Dudas que a uno le surgen....

Saludos
__________________
Nadie nacío sabiendo...
  #2 (permalink)  
Antiguo 24/07/2007, 13:58
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 3 meses
Puntos: 535
Re: rs.close vs rs = nothing

Sobre si se liberan, todos lo hacen al finalizar la ejecución del script. Igualmente siempre es recomendable cerrar (bla.close) los procesos que se abrieron (bla.open) y destruir (set bla = nothing) los que se han creado (set bla = server.createobject(x)) inmediatamente después de dejar de usarlos. Es una de las "buenas prácticas".

Saludos
  #3 (permalink)  
Antiguo 24/07/2007, 16:57
Avatar de CésarBalaguer  
Fecha de Ingreso: octubre-2006
Ubicación: en mi casa
Mensajes: 181
Antigüedad: 17 años, 8 meses
Puntos: 0
Re: rs.close vs rs = nothing

tal como lo dices es una buena práctica
cerrar todo lo que se abre y matar todo lo que se crea, pero hay una diferencia mas.
el Close cierra el objeto, sin embargo este sigue ocupando una posición y espacio en memoria y puede ser reabierto nuevamente, mientras el Nothing lo libera completamente de memoria por lo que no ocupa espacio.
  #4 (permalink)  
Antiguo 24/07/2007, 17:55
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 3 meses
Puntos: 535
Re: rs.close vs rs = nothing

Hola César, es correcto, pero me entra una duda (que podría probar por mis medios pero no tengo ganas ahora ;) ¿si matamos el objeto sin haberlo cerrado, es lo mismo que previamente cerrarlo?

Edit: Mmm... no tiene mucha lógica... debe dar error el matarlo sin cerrarlo.
  #5 (permalink)  
Antiguo 25/07/2007, 01:34
 
Fecha de Ingreso: enero-2006
Ubicación: Torroles (Costa der Só)
Mensajes: 1.017
Antigüedad: 18 años, 5 meses
Puntos: 7
Re: rs.close vs rs = nothing

Puedes liberar memoria destruyendo el objeto para ASP pero para ADO seguirá instanciado. Esto es válido para todos los objetos contra ADO excepto Command que lo que hace es ejecutar un comando ADO internamente con lo cual el abre y cierra los objetos que necesita (obviamente debes instanciarlo con Set para ASP) Si os fijais Command no tiene el método Close.

Pautas contra ASP:

- Se instancia el objeto con Set
- se realizan operaciones con el objeto
- Se destruye el objeto asignando al objeto el valor Nothing

Pautas contra ADO

- Se abre la conexion con los métodos que poseen sus objetos. (Open)
- Se ejecutan las operaciones con la BD
- Se cierra la conexion con la BD y se libera ADO

Hay que tener en cuenta que, al igual que con otros objetos COM, existen dos capas entre la programación y la BD: La capa que instancia el objeto para ASP y la que instancia el objeto para ADO. Es cierto que cuando el servidor envia la página procesada al cliente, se cierran y liberan todas las instancias (a no ser que mantengas algun objeto a traves de sesiones, cosa totalmente desaconsejable en servidores con mucha carga) pero es una buena práctica tal como dice Al Zuwaga y ayuda al servidor a ir liberando espacio de memoria el instanciar/abrir objetos y cerrarlos/destruirlos lo antes posible.



Un saludo
__________________
"Tus pecados son el estiércol sobre el que florecerán las flores de tus virtudes" - Gerald Messadié -
  #6 (permalink)  
Antiguo 25/07/2007, 06:53
 
Fecha de Ingreso: mayo-2004
Mensajes: 189
Antigüedad: 20 años
Puntos: 1
Re: rs.close vs rs = nothing

ok, pasando en limpio:
se debe usar rs.close y set re = nothing, ambas a la vez, ya que una es referencia de ASP (createObjet y nothing) y la otra de ADO (open y close).

Mil gracias por despejarme esta duda, ya les traere mas para que no se aburran ;)

Saludos.....
__________________
Nadie nacío sabiendo...
  #7 (permalink)  
Antiguo 25/07/2007, 07:23
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 4 meses
Puntos: 146
Re: rs.close vs rs = nothing

Cita:
se debe usar rs.close y set re = nothing, ambas a la vez, ya que una es referencia de ASP (createObjet y nothing) y la otra de ADO
Bueno, no tanto así, .Close hace una cosa y la asignación Nothing hace otra muy diferente. Uno puede cerrar el recordsert si lo quiere volver a utilizar con otra consulta por ejemplo, esto tantas veces como tu quieras. Si destruyes el objeto se hace un cierre implícito pero hace que debas volver a crearlo si necesitas usarlo de nuevo obiamente.

Cada una tiene su función específica

Saludos
  #8 (permalink)  
Antiguo 25/07/2007, 07:51
Avatar de CésarBalaguer  
Fecha de Ingreso: octubre-2006
Ubicación: en mi casa
Mensajes: 181
Antigüedad: 17 años, 8 meses
Puntos: 0
Re: rs.close vs rs = nothing

Cita:
¿si matamos el objeto sin haberlo cerrado, es lo mismo que previamente cerrarlo?
si se puede, pero no se debe... es una de las buenas prácticas de la programación, es como querer usar variables sin declararlas, también se puede, pero no se debe...

Cita:
Puedes liberar memoria destruyendo el objeto para ASP pero para ADO seguirá instanciado. Esto es válido para todos los objetos contra ADO excepto Command que lo que hace es ejecutar un comando ADO internamente con lo cual el abre y cierra los objetos que necesita (obviamente debes instanciarlo con Set para ASP) Si os fijais Command no tiene el método Close.
Muchas gracias por el dato, no lo conocía...

Cita:
Bueno, no tanto así, .Close hace una cosa y la asignación Nothing hace otra muy diferente. Uno puede cerrar el recordsert si lo quiere volver a utilizar con otra consulta por ejemplo, esto tantas veces como tu quieras. Si destruyes el objeto se hace un cierre implícito pero hace que debas volver a crearlo si necesitas usarlo de nuevo obiamente.
Cabe resaltar que en ADO se pueden usar los recordset desconectados como si tuviesen la conexión a la base de datos activa.

Saludos.
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 20:03.