LIBERAR MEMORIA??

11/05/2008 - 22:18 por Orfao | Informe spam
Hola Grupo !
tengo un libro bastante grande donde ejecuto codigo para actualizar ciertos
valores
pero he notado que la primera vez tarda 2.1 seg la segunda 3.0 la tercera
3.48 la cuarta 4.37 y asi... (aproximadamente 50 segundos mas en caca
ejecucion).
lo cual vuelve a tardar el minimo de 2.1 si y solo si guardo y cierro y
vuelvo a abrir.
me imagino que es un problema de almacenamiento de variables "memoria" o
algo por el estilo. La pregunta es como sin necesidad de cerrar la sesion de
excel puedo liberar esas maviables o memoria o resetear todo o etc...
uso excel 2003 en xp sp2 y dimensiono las variables en alguna de las
funciones. es esto determinante ??? "el option explicit solo lo tengo en
algunos modulos" que diferencia habria ? es necesario dimensionar cada una de
las variables ? en otro caso, como liberar la memoria ? en cada procedimiento
? en cada funcion ? en cada modulo ? al finalizar el recalculo ?
en definitiva como hacer constante el tiempo de recalculo y como minimizarlo
???
Gracias de antemano...


Me alimento del conocimiento de todos

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
12/05/2008 - 03:05 | Informe spam
hola, moises !

tengo un libro bastante grande donde ejecuto codigo para actualizar ciertos valores
pero he notado que la primera vez tarda 2.1 seg la segunda 3.0 la tercera 3.48 la cuarta 4.37 y asi...
(aproximadamente 50 segundos mas en caca ejecucion).
lo cual vuelve a tardar el minimo de 2.1 si y solo si guardo y cierro y vuelvo a abrir.
me imagino que es un problema de almacenamiento de variables "memoria" o algo por el estilo.



esta parte es mas seguro que probable, que SI este siendo una causa (de entre varias mas posibles) de esta "desmejora"

La pregunta es como sin necesidad de cerrar la sesion de excel puedo liberar esas maviables o memoria o resetear todo o etc.



esta parte (dejando de lado un momento el "etc.") es cuestion de "usos y costumbres" al administrar tus variables -???-

uso excel 2003 en xp sp2 y dimensiono las variables en alguna de las funciones. es esto determinante ???
"el option explicit solo lo tengo en algunos modulos" que diferencia habria ?



el uso del "option explicit" es (solamente) mientras estas escribiendo el codigo que no te deje usar variables NO declaradas
este intento ocasiona una "depuracion" (mensajes de error) y OJO con las depuraciones... son causa de "crecimiento" de archivos :-((

es necesario dimensionar cada una de las variables ?



esta parte depende de la intencion, proposito, uso y administracion de tus variables -???-

en otro caso, como liberar la memoria ?
- en cada procedimiento ?
- en cada funcion ?
- en cada modulo ?
- al finalizar el recalculo ?



(generalmente) es una "sana costumbre" seguir "ciertas reglas" al programar aplicaciones
de manera (solamente) enunciativa, puedes incluir algunas de las siguientes:
- las variables de uso "general" declararlas en un modulo estandar como "Public" (y segun el tipo de cada variable)
- las variables de objeto, que establezcas sus referencias mediente una instruccion del tipo:
Set <variable_de_objeto> = <el_objeto_asignado>
procura "destruirla"... "en cuanto deje de ser util o haya cumplido su proposito con otra instruccion del tipo:
Set <variable_de_objeto> = Nothing
SOBRE TODO, si este tipo de variables lo usas en procedimientos "Function" a los que haces llamadas frecuentes o recursivas -???-
- de seguro hay mas "costumbres sanas" que debieras tener en cuenta (faltaria conocer tus usos y costumbres ?)

en definitiva como hacer constante el tiempo de recalculo y como minimizarlo ???



esta pregunta... SIN los detalles PRECISOS... (me temo que)... no tiene respuesta :-((
(no existe una "receta de cocina"... ni una "solucion de tres palabras"... ni una "regla universal"... ni nada parecido)

saludos,
hector.
Respuesta Responder a este mensaje
#2 Orfao
12/05/2008 - 03:30 | Informe spam
Gracias Hector
con respecto al punto de las depuraciones , particularmente uso muy poco
agregar puntos de inspeccion, inspeccion rapida o cosas por el estilo , pero
si frecuentemente luego de agregar algunas lineas de codigo compilo VBA .
Es esto lo que dices que causa el crecimiento del archivo ??? y en todo caso
como restituiria al tamaño real ???
con respecto a las declaraciones de variables solo las dimensiono ej Dim x
as integer y no con el set . diferencias ?? "reralmente no entiendo mucho del
tema"
si me dieras algunos detalles, ejemplos, diferencias, etc, tal vez
entendiera un poquitico mas. Gracias.
Me alimento del conocimiento de todos


"Héctor Miguel" wrote:

hola, moises !

> tengo un libro bastante grande donde ejecuto codigo para actualizar ciertos valores
> pero he notado que la primera vez tarda 2.1 seg la segunda 3.0 la tercera 3.48 la cuarta 4.37 y asi...
> (aproximadamente 50 segundos mas en caca ejecucion).
> lo cual vuelve a tardar el minimo de 2.1 si y solo si guardo y cierro y vuelvo a abrir.
> me imagino que es un problema de almacenamiento de variables "memoria" o algo por el estilo.

esta parte es mas seguro que probable, que SI este siendo una causa (de entre varias mas posibles) de esta "desmejora"

> La pregunta es como sin necesidad de cerrar la sesion de excel puedo liberar esas maviables o memoria o resetear todo o etc.

esta parte (dejando de lado un momento el "etc.") es cuestion de "usos y costumbres" al administrar tus variables -???-

> uso excel 2003 en xp sp2 y dimensiono las variables en alguna de las funciones. es esto determinante ???
> "el option explicit solo lo tengo en algunos modulos" que diferencia habria ?

el uso del "option explicit" es (solamente) mientras estas escribiendo el codigo que no te deje usar variables NO declaradas
este intento ocasiona una "depuracion" (mensajes de error) y OJO con las depuraciones... son causa de "crecimiento" de archivos :-((

> es necesario dimensionar cada una de las variables ?

esta parte depende de la intencion, proposito, uso y administracion de tus variables -???-

> en otro caso, como liberar la memoria ?
> - en cada procedimiento ?
> - en cada funcion ?
> - en cada modulo ?
> - al finalizar el recalculo ?

(generalmente) es una "sana costumbre" seguir "ciertas reglas" al programar aplicaciones
de manera (solamente) enunciativa, puedes incluir algunas de las siguientes:
- las variables de uso "general" declararlas en un modulo estandar como "Public" (y segun el tipo de cada variable)
- las variables de objeto, que establezcas sus referencias mediente una instruccion del tipo:
Set <variable_de_objeto> = <el_objeto_asignado>
procura "destruirla"... "en cuanto deje de ser util o haya cumplido su proposito con otra instruccion del tipo:
Set <variable_de_objeto> = Nothing
SOBRE TODO, si este tipo de variables lo usas en procedimientos "Function" a los que haces llamadas frecuentes o recursivas -???-
- de seguro hay mas "costumbres sanas" que debieras tener en cuenta (faltaria conocer tus usos y costumbres ?)

> en definitiva como hacer constante el tiempo de recalculo y como minimizarlo ???

esta pregunta... SIN los detalles PRECISOS... (me temo que)... no tiene respuesta :-((
(no existe una "receta de cocina"... ni una "solucion de tres palabras"... ni una "regla universal"... ni nada parecido)

saludos,
hector.



Respuesta Responder a este mensaje
#3 Héctor Miguel
12/05/2008 - 05:20 | Informe spam
hola, moises !

con respecto al punto de las depuraciones
particularmente uso muy poco agregar puntos de inspeccion, inspeccion rapida o cosas por el estilo
pero si frecuentemente luego de agregar algunas lineas de codigo compilo VBA .
Es esto lo que dices que causa el crecimiento del archivo ???
y en todo caso como restituiria al tamano real ???



- (hasta donde se) cuando suceden compilaciones/depuracones de codigos (ya sea en tiempo de diseno/ejecucion)
(p.e. cuando saltan errores durante las pruebas) y se hacen las correcciones pertinentes Y SE GUARDA el archivo
(eventualmente) llegaran a ser "causa" de un crecimiento (desconocido) de los archivos (si esto sucede con frecuencia)

- una vez alcanzado un (cierto) grado/nivel de (posible) corrupcion (por la repeticion de estos sucesos)...
solo queda una (re)construccion... "partiendo de cero" (o sea, crear nuevamente los objetos y los codigos)

con respecto a las declaraciones de variables solo las dimensiono ej Dim x as integer y no con el set . diferencias ??
realmente no entiendo mucho del tema, si me dieras algunos detalles, ejemplos, diferencias, etc, tal vez ...



- consulta la ayuda en linea de vba-excel {F1} el tema: "declarar variables" (hay mas informacion de la que yo te pueda proveer)
la palabra clave Dim se usa para declarar variables y asignarles un tipo de datos segun el uso pretendido de cada variable
esto "reserva" espacio en memoria para el contenido "usable" en el codigo de cada variable
segun "el tipo" (de datos) asignado a la variable, sera el espacio "consumido" una vez "llenada" su reserva de memoria
una variable de tipo objeto (p.e. Dim Hoja As Worksheet) generalmente necesita ser asignada por una instruccion Set <variable> = .

- entender "la vida" de las variables, es un tema que bien merece su "capitulo aparte" (tambien esta en la ayuda en linea)
y (definitivamente) en tanto se conocen detalles mas... "precisos"... me quedo con el ultimo comentario del mensaje anterior...

__ final de la consulta anterior __
en definitiva como hacer constante el tiempo de recalculo y como minimizarlo ???



esta pregunta... SIN los detalles PRECISOS... (me temo que)... no tiene respuesta :-((
(no existe una "receta de cocina"... ni una "solucion de tres palabras"... ni una "regla universal"... ni nada parecido)





saludos,
hector.
Respuesta Responder a este mensaje
#4 Orfao
12/05/2008 - 05:36 | Informe spam
Hola HEctor, ahora estoy "creo que un poco mas claro" pero...pregunta aparte:
tendria que ver algo con el hecho de que se pueden deshacer hasta varios
niveles ???
he visto que en otros programas el usuario puene establecer el numero de
niveles deshacer . Es esto posible en excel o, acaso es posible inhabilitar
el deshacer ???
Gracias
Me alimento del conocimiento de todos


"Héctor Miguel" wrote:

hola, moises !

> con respecto al punto de las depuraciones
> particularmente uso muy poco agregar puntos de inspeccion, inspeccion rapida o cosas por el estilo
> pero si frecuentemente luego de agregar algunas lineas de codigo compilo VBA .
> Es esto lo que dices que causa el crecimiento del archivo ???
> y en todo caso como restituiria al tamano real ???

- (hasta donde se) cuando suceden compilaciones/depuracones de codigos (ya sea en tiempo de diseno/ejecucion)
(p.e. cuando saltan errores durante las pruebas) y se hacen las correcciones pertinentes Y SE GUARDA el archivo
(eventualmente) llegaran a ser "causa" de un crecimiento (desconocido) de los archivos (si esto sucede con frecuencia)

- una vez alcanzado un (cierto) grado/nivel de (posible) corrupcion (por la repeticion de estos sucesos)...
solo queda una (re)construccion... "partiendo de cero" (o sea, crear nuevamente los objetos y los codigos)

> con respecto a las declaraciones de variables solo las dimensiono ej Dim x as integer y no con el set . diferencias ??
> realmente no entiendo mucho del tema, si me dieras algunos detalles, ejemplos, diferencias, etc, tal vez ...

- consulta la ayuda en linea de vba-excel {F1} el tema: "declarar variables" (hay mas informacion de la que yo te pueda proveer)
la palabra clave Dim se usa para declarar variables y asignarles un tipo de datos segun el uso pretendido de cada variable
esto "reserva" espacio en memoria para el contenido "usable" en el codigo de cada variable
segun "el tipo" (de datos) asignado a la variable, sera el espacio "consumido" una vez "llenada" su reserva de memoria
una variable de tipo objeto (p.e. Dim Hoja As Worksheet) generalmente necesita ser asignada por una instruccion Set <variable> = .

- entender "la vida" de las variables, es un tema que bien merece su "capitulo aparte" (tambien esta en la ayuda en linea)
y (definitivamente) en tanto se conocen detalles mas... "precisos"... me quedo con el ultimo comentario del mensaje anterior...

__ final de la consulta anterior __
>>> en definitiva como hacer constante el tiempo de recalculo y como minimizarlo ???
>>
>> esta pregunta... SIN los detalles PRECISOS... (me temo que)... no tiene respuesta :-((
>> (no existe una "receta de cocina"... ni una "solucion de tres palabras"... ni una "regla universal"... ni nada parecido)

saludos,
hector.



Respuesta Responder a este mensaje
#5 Héctor Miguel
12/05/2008 - 05:42 | Informe spam
hola, moises !

... pregunta aparte:
tendria que ver algo con el hecho de que se pueden deshacer hasta varios niveles ???
he visto que en otros programas el usuario puene establecer el numero de niveles deshacer .
Es esto posible en excel o, acaso es posible inhabilitar el deshacer ???



(hasta donde se) el "deshacer" (undo / ctrl+Z) es un tema aparte y es una caracteristica por diseno (en excel)
- los niveles (16 por omision) los puedes modificar desde el registro de windows (tema aparte tambien)
- OJO: SE PIERDEN en cuanto algun codigo modifica propiedades a objetos, se guarda el archivo...
y muy probablemente durante el curso de algunos eventos mas (excepto en la version 2007)

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