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

Un par de dudas acerca del método getRows()

Estas en el tema de Un par de dudas acerca del método getRows() en el foro de ASP Clásico en Foros del Web. Hola, yo hace tiempo ya empece a usar el método getRows() del RS para mostrar los resultados de este. Pero como siempre quiero asegurarme de ...
  #1 (permalink)  
Antiguo 31/05/2005, 15:14
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 2 meses
Puntos: 9
Un par de dudas acerca del método getRows()

Hola, yo hace tiempo ya empece a usar el método getRows() del RS para mostrar los resultados de este. Pero como siempre quiero asegurarme de que lo que estoy haciendo es lo correcto, me gustaría escuchar sus opiniones acerca de estos dos temas.
El primer tema que me gustaría tocar es si es conveniente para ustedes usar en todos los casos el método getRows(), en ningún caso o en que casos lo utilizarían.
El segundo tema es si conviene utilizarlo para resultados con muchos registros o con pocos registros. Y algo anexo a esto, es si exite alguna forma de borrar variable que contiene el array bidimesional generado por el método getRows() para así liberar memoria justo después de haber terminado de mostrar los resultados. Hay alguna forma efectiva de hacer esto?.
BUeno, les dejo un saludo y estoy ansioso por leer que es lo que piensan.
Saludos!.
  #2 (permalink)  
Antiguo 31/05/2005, 15:41
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
Por un buen tiempo, yo dejé de trabajar con recordsets para darle paso a los arreglos generados por el método getrows, la razón es que dicen los que saben que es mas eficiente en cuanto a optimización de recursos, pero tu pregunta es buena...quien sabe realmente que tan bueno sea cuando tienes que manejar una cantidad muy grande de filas/columnas, pues el arreglo se vuelve inmenso, aunque bueno, si ese fuera el caso, podrías siempre recurrir a algún tipo de segmentación para este propósito, no me aventuro mucho en esto, pues no lo se a ciencia cierta, pero ME PARECE que es una buena costumbre trabajar con GetRows comparado a trabajar con el Recordset como tal...

Con respecto a la segunda duda, cualquier arreglo se puede destruir mediante la instrucción erase

Código:
ds = rs.GetRows()
rs.Close
Set rs = Nothing
'juegas con tu arreglo
erase ds
Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #3 (permalink)  
Antiguo 31/05/2005, 16:08
Avatar de trasgukabi  
Fecha de Ingreso: septiembre-2004
Mensajes: 2.749
Antigüedad: 19 años, 9 meses
Puntos: 18
Últimamente me ha tocado trabajar con una BBDD enorme y unos listados igual de enormes, y estoy con U_G en que en cualquier caso se debe usar getrows(). Con tener cuidado de liberar el arreglo en el momento que termines de recorrerlo es suficiente.

Digo yo, vaya. venga Neuron, postea uno de los tuyos llevando la contraria, que sino esto no tiene salsa!!!!
  #4 (permalink)  
Antiguo 31/05/2005, 16:36
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 2 meses
Puntos: 9
Bueno entonces si ustedes tienen esa experiencia la verdad que es recomendable seguir su consejo. Yo lo único que tenía miedo es acerca del tema de la memoria, y después liberar a esta de una manera efectiva, así que seguiré dandole para adelante con este método gracias a lo que ustedes han comentado.
Muchas gracias por sus comentarios y por su ayuda como siempre.
Saludos!.
  #5 (permalink)  
Antiguo 31/05/2005, 17:53
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 19 años, 2 meses
Puntos: 2
Hola!

Jajajaja, bueno, pues aunque no lo crean estoy totalmente de acuerdo, recordset es muy ineficiente, y entre muchos tipos de Paginacion, que es donde se usa una gran cantidad de resultados al mismo tiempo, no hay nada mejor que usar GetRows, claro, con el buen uso de todos tus recursos.

Pero bueno, estoy de acuerdo.

Lo que si cabe mencionar, porque no estoy 100% seguro, yo siempre me preocupo por liberar la memoria que reservo, y por parte de los arreglos me parece que estos son liberados siempre cuando se cierra el script, o cuando se deja de ejecutar, es decir, los crea, los usa, y los libera automaticamente, por lo menos en la practiva asi lo he visto porque nunca he tenido problemas de memoria por esa razon.

Sin embargo, si quisiera saber exactamente que pasa con los arreglos, la funcion Erase no la conocia, y si me es muy util presisametne porque cuando reutilizo un arreglo quiero estar seguro de liberar todo lo que tenia y usarlo de nuevo vacio, siempre he heco:

Dim arreglo(N)
//Manejar arreglo
Redim arreglo(M)
//Manejar arreglo

Pero eso es totalmente correcto ?.... realmente se libera todo lo que tenia el arreglo antes ?

Lo mejor seria hacer esto:

Dim arreglo(N)
//Manejar arreglo

//Liberar completamente arreglo
Erase arreglo

Redim arreglo(M)
//Manejar arreglo

????

Por otra parte, cuando tienes arreglos en Session, no se pueden modificar, como:

Session("arreglo")(0) = NuevoValor

En mis pruebas esto nunca se ha podido hacer, entonces siempre tengo que liberar el arreglo de session y meter el nuevo.

Mi pregunta, alguien sabe como hacerlo donde es totalmente seguro que el arreglo anterior se libera ?

He hecho cosas como:

Session("arreglo") = Null
set Session("arreglo") = nothing

Pero ahi no estoy totalmente seguro porque no he encontrado documentacion que me explique que esta pasando si hago eso.

Gracias.
__________________
NeuronaNet.com... la idea correcta.
http://www.NeuronaNet.com
  #6 (permalink)  
Antiguo 31/05/2005, 19:12
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
Bueno, supongo que para reutilizar un arreglo basta con que lo redimensiones, en el caso de la funcion erase, lo que hace es borrar ese arreglo, por lo tanto si quisieras reutilizarlo, ya no existe.

Yo utilizo el erase inmediatamente después de trabajar con mi arreglo, pues aunque dicen los de MS que se destruye después de la ejecución del script, a lo mejor solamente se vuelve inaccesible, pero sigue ocupando memoria, quien sabe, por si acaso siempre lo destruyo.

Por otra parte procuro nunca utilizar arreglos en sesiones, son consumidores voraces de memoria.

Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #7 (permalink)  
Antiguo 31/05/2005, 20:35
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 19 años, 2 meses
Puntos: 2
Si

De acuerdo con lo de arreglos en session, pero cuando son necesarios pues ni modo, los usas, igual con objDict en session, pero ni modo...

Bueno, entonces probare lo de erase para session, etc.

Gracias.
__________________
NeuronaNet.com... la idea correcta.
http://www.NeuronaNet.com
  #8 (permalink)  
Antiguo 01/06/2005, 10:21
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
Creo yo que para eliminar el arreglo de la session sería suficiente con eliminar el elemento de la colección (como con cualquier variable session "normal"):

Session.Contents.Remove("Arreglo")

No sirve sólo asignarle un valor Null o uno vacío, pues aunque no tenga contenido continúa existiendo el elemento en la colección. Para muestra, un botón:


Código:
<%
session("session_uno") = "uno"
session("session_dos") = "dos"
session("session_tres") = "tres"

session("session_uno") = Null
session.contents.remove("session_dos")
session("session_tres") = ""

for each elemento in session.contents
response.write elemento & ": " & session.contents(elemento) & "<br>"
next

session.abandon()
%>
Resultado:

Código:
session_uno:
session_tres:
saludos
__________________
...___...
  #9 (permalink)  
Antiguo 01/06/2005, 10:31
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 19 años, 2 meses
Puntos: 2
Gracias.

Estoy de acuerdo, pero mi duda, con Remove se quita de session el elemento, pero si se libera el espacio en memoria que ocupa ?

Con Null si sabia que el elemento continuaba, pero lo que no se es si el espacio en memoria se libera automaticamente...

Gracias, es un tema importante, por lo mismo de que en memoria los arreglos resultan problematicos.
__________________
NeuronaNet.com... la idea correcta.
http://www.NeuronaNet.com
  #10 (permalink)  
Antiguo 01/06/2005, 10:32
 
Fecha de Ingreso: febrero-2005
Mensajes: 1.015
Antigüedad: 19 años, 4 meses
Puntos: 6
Hmm, getrows y paginación... suenan interesantes.
  #11 (permalink)  
Antiguo 01/06/2005, 11:31
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
A pos.. si REALMENTE se liberan de memoria, es algo que habrá que preguntarle a los programadores de maicrosoft
__________________
...___...
  #12 (permalink)  
Antiguo 01/06/2005, 11:32
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
Te van a decir que por supuesto que si, aunque ni siquiera ellos sepan
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #13 (permalink)  
Antiguo 01/06/2005, 11:37
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 19 años, 2 meses
Puntos: 2
Gracias.

Bueno, pues sera la duda, porque en ninguna parte he encontrado informacion que me diga exactamente esa respuesta, aunque pareciera que si segun la practica... pero siempre es mejor estar seguro...

Gracias.
__________________
NeuronaNet.com... la idea correcta.
http://www.NeuronaNet.com
  #14 (permalink)  
Antiguo 01/06/2005, 13:24
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 2 meses
Puntos: 9
Y si, lamentablemente resulta incomprobable si se liberan o no realmente de la memoria, pero bueno, habrá que confiar en que sí. También quería mencionar acerca del ObjDict en una sesion, ya que es el método que yo implemento para el carro de compras. Me parece que pensandolo bien, no es la forma más efectiva de hacerlo no?, porque se sabe que las sesiones recargan el servidor y los array también, y usar los dos al mismo tiempo, sobre todo habiendo muchos usuarios conectados puede no ser algo bueno. Pero pienso que el objeto Dict se adapta perfectamente a la funcionalidad que debe tener el carro de compras, por eso seguí manteniendolo así.
Por otro lado, yo siempre utilizaba Null para eliminar el contenido de la sesión, pero me di cuenta gracias a lo que dijeron que no es lo más óptimo. Pero en el caso de que una sesion se anexe a un objeto, como en el caso del carro de compras, esta bien con que ponga set session("carro") = nothing ??
Bueno les dejo un saludo y gracias a todos por responder y continuar con el debate que siempre son enriquecedores para todos, y sobre todo para los novatos.
  #15 (permalink)  
Antiguo 01/06/2005, 15:15
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 19 años, 2 meses
Puntos: 2
Hola!

Mira, lo de los objetos y arrays en memoria, digamos que es algo que cuesta caro, pero vale la pena pagar el precio, solo hay que ser muy cuidadosos, recuerdo tu mensaje de ese tema, y realmente el objDict no creo que te de problemas graves, porque es un objeto que tiene muy pocos elementos por usuario, entonces esta bien, donde debes tener mucho mas cuidado es en sistemas grandes como paginacion que mueve una gran cantidad de resultados, etc.

Pero en cosas pequeñas es cuestión de tener cuidado y listo, ademas un arreglo y un objDict por usuario pues no hay problema, por otra parte, session no recarga el servidor (tal vez te entendi mal), claro, consume recursos pero como cualquiera

Lo que dices del objDict en session, segun mi experiencia es totalmente correcto, porque es propio de esos objetos, esta documentado que para destruirlos uses set objDict = nothing y funcionara correctamente, entonces en session pasa lo mismo set session("objDict") = nothing, te digo porque asi lo manejo y estoy seguro de que se esta liberando.

Pero estamos en el entendido de que un objDict es lento y es mucho mas complejo que un simple arreglo.

La duda creo que seguira siendo array en session, porque parece que lo hace, pero quien sabe.

Suerte!!
__________________
NeuronaNet.com... la idea correcta.
http://www.NeuronaNet.com
  #16 (permalink)  
Antiguo 01/06/2005, 16:41
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 2 meses
Puntos: 9
Hola Neuron, no, no entendiste mal, entendiste lo que tenías que entender, ya que me exprese mal. Pero la idea que quería reflejar era eso, que consumía recursos del servidor, pero con la salvedad de que yo pensaba que consumía más recursos de lo común, pero entonces veo por lo que decis que no es así, por lo que me quedo más tranquilo.
Gracias Neuron y gracias a todos también, no me voy a cansar de repetirlo.
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 15:26.