FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
¿Problema de memoria?
Hola qué tal? Gracias por felicitarme en el día de mi cumpleaños!!!
Veréis, tengo un problema bastante raro. Cuando corro mi aplicación con bases de datos Paradox y escrito en delphi 5 en un ordenador con Win98 funciona de maravilla, pero cuando estoy utilizando esta aplicación durante un cierto tiempo (más o menos un cuarto de hora) ésta "peta" y aparece un mensaje de error de Windows diciendo que se ha producido un error y el programa debe cerrarse, independientemente de lo que esté haciendo el programa. Esto puede deberse a un problema de memoria? Este ordenador tiene 128 MB de RAM!!! No creo, no? O sino qué está pasando? Agradecería una respuesta, ya que esta sería mi mejor regalo de cumpleaños jejejeje!!! Gracias anticipadas. |
#2
|
|||
|
|||
hola Ciscu, en primer lugar felicitarte :P, en segundo, te has dado cuenta que has duplicado el mensaje? creo que te toca reprimenda por parte de los moderadores jeje
Bueno voy al grano. Puede ser problema de memoria, pero no por que tengas poca, sino por que a lo mejor no estas cerrando correctamente una ventana y despues la vuelves a crear, o tal vez no estas liberando bien una variable. Por que no detallas un poco más el proceso de tu aplicación? Salu2 |
#3
|
||||
|
||||
Cita:
Cita:
Revisa el código que tengas donde hayas colocado Free o los eventos OnClose que puedas haber programado como ya te han dicho.
__________________
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
|
|||
|
|||
Hola a todos!!!
Bueno, ante todo el ordenador es Celeron (sin procesador matemático) con Win98 SE; puede afectar esto en algo? El problema que me aparece es el típico de Windows, es decir, "El programa ha efectuado una operación no válida y debe cerrarse". Cuando ejecuto mi programa, en la memoria se carga el formulario principal con menús y 3 datamodules llenos de las tablas paradox (TTable) y consultas (TQuery). Entonces, cuando quiero, por ejemplo, facturar, voy a este menú y se carga en memoria este formulario, y cuando salgo lo libero mediante Código:
Formx.Release Código:
Formx.ShowModal Podéis seguir ayudándome? Gracias de antemano |
#6
|
|||
|
|||
yo particularmente los hago del siguiente modo
El FreeAndNil si no recuerdo mal creo que se implemento a partir de la version 5 de Delphi, que es lo equivalente a quitar le puntero y hacer un Free |
#7
|
|||
|
|||
Mi metodo es el siguiente:
Código:
with TForm_Pantalla.Create(self) do begin if ShowModal = mrOk then begin // Si realizo alguna operación despues de aceptar la otra // pantalla añado el código aquí end else begin // Lo mismo si cancelo. end; Free; end; |
#8
|
||||
|
||||
Cita:
Y supongo que la variable que crea Delphi en la unidad de la ventana la eliminarás, ya que no la usas, es un puntero, no ocupa mucho espacio en memoria mientras que no la instancies, pero si tienes muchas ventanas, se van sumando los 4 bytes de cada puntero. El método de chicolita lo veo muy correcto. Saludos |
#9
|
|||
|
|||
Pues con permiso del personal, yo añadiré un try...except al código propuesto
Es que me gusta ver el tipo de excepción lebantada en una pantallita controlada po mi, manias de uno, ya véis |
#10
|
|||
|
|||
Si efectivamente Lepe, esta variable
Código:
var Form_Pantalla: TForm_Pantalla; Yo tambien utilizaba el metodo de chicolita, pero digamos que tuve una mala experiencia por problemas de memoria en un proyecto, y me asesoraron que ese metodo no era muy correcto ¿?¿? así que utilizo este otro y así siempre me aseguro que no dejo la Form alojada en memoria una vez cerrada. |
|
|
|