FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
muchas varibles locales, como consumir menos memoria
amigos en un procedimiento declaro muchas varibles locales, cuando digo muchas me refiero a 120 varables locales , este procedimiento se llama varias veces por minuto, que recomendación me dan para disminuir el consumo de memoria. y la mayoria de las variables son String. el comsumo de memoria es menor si limito la declaracion del string Ejm:
__________________
La vida es un simple pero complejo If J=rS
|
#2
|
||||
|
||||
Hola
Sin entrar a polemizar sobre la conveniencia del uso de variables globales ya que no conozco el caso, yo usaría long strings (string) que son punteros y pueden incrementarse/decrementarse dinámicamente acorde a los valores asignados. Para ellas, Delphi utiliza un contador de apuntadores que referencian al valor almacenado (reference counter) y cuando este llega a 0 la memoria es liberada. Al ser apuntadores, copiar una variable tipo string es más veloz que copiar una tipo ShortString. Y por último al ser un puntero, la declaración de una variable string ocupa 4 bytes y la de una string[4] ocupa 5 (en la posición cero almacena la longitud de la cadena), es fácil de comprobar: Aunque a decir verdad, declarando todas las variables como string[4] nunca superarás un uso de memoria de 5 * 120 = 600 bytes (los uses o no). En cambio declarando todas como string, si bién incialmente se consumen 4 * 120 = 580 bytes, el uso de memoria será mayor si les asignas más de 5 caracteres. Un saludo.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#3
|
||||
|
||||
Si se trata de buscar optimizaciones, habría que ver el procedimiento con detalle, para tener información completa.
Por un lado se me hace difícil pensar en 120 variables, básicamente no me imagino para qué pueden hacer falta y si son todas necesarias. No se si habría forma de reutilizarlas o de diseñar eso de otra forma. Por otro lado si son variables locales, al salir del procedimiento esa memoria se libera, por lo que no debería representar un conveniente llamarlo las veces que sean necesarias. Cada llamada no implica más gasto si todo se libera correctamente.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#4
|
||||
|
||||
Cita:
Pero cabe mencionar que con 120 variables el consumo de CPU puede resultar importante, dependiendo en buena medida de qué tantas de esas variables usen contadores de referencias (debido a las necesarias inicializaciones y finalizaciones), y de la frecuencia con que la rutina es llamada: varias veces por minuto, según comenta JerS. JerS, como ya dijo Neftalí, habría que ver ese procedimiento con detalle. ¿Sería posible que colocaras aquí una copia del mismo, o al menos algo que se le asemeje en caso de ser muy confidencial? Saludos. Al González. |
#5
|
|||
|
|||
Muchas gracias por sus aportes, por lo que he podido entender no hay mucha diferencia entonces entre declarar la variable como String o String[4] y al declarar las variables como locales al terminar el proceso son liberadas de memoria sin problema. entonces este no es el problema de mi procedimiento, lo que sucede es que es un procedimiento muy extenso de mas de 2000 lineas y en cierto punto sobre todo al hacer ZQuery1.Open me da problemas de Access Violation o Invalit pointer operation o muchas veces en algo tan sencillo como edit1.clear; por eso estoy descartando que puede ser :S
__________________
La vida es un simple pero complejo If J=rS
|
#6
|
||||
|
||||
Cita:
Utiliza Try...except para capturar posibles excepciones. Revisa elementos que creas y destruyes en el procedimiento, puesto que los Access Violation suelen ser debidos a accesos incorretos a memoria (por ejemplo cosas que todavía no se han creado al accederlas o que se han destruído antes de tiempo).
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
¿Cómo descargar Archivo de Muchas Fuentes? | JXJ | Varios | 3 | 14-03-2007 02:09:08 |
Aplicacion carga muchas fichas en memoria. | zugazua2001 | Varios | 4 | 06-09-2005 17:40:41 |
¿Se pueden utilizar varibles en SQL? | nuri | SQL | 3 | 09-07-2005 00:43:57 |
Los ordenadores son mas lentos y tienen menos memoria | haron | Debates | 8 | 11-05-2005 17:28:21 |
Varibles Globales | nancy | Varios | 2 | 05-01-2005 14:46:26 |
|