Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-09-2004
ciscu ciscu is offline
Miembro
 
Registrado: jun 2003
Ubicación: Granollers
Posts: 114
Poder: 21
ciscu Va por buen camino
¿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.
Responder Con Cita
  #2  
Antiguo 07-09-2004
burasu burasu is offline
Miembro
 
Registrado: may 2003
Ubicación: Cádiz - España
Posts: 183
Poder: 21
burasu Va por buen camino
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
Responder Con Cita
  #3  
Antiguo 07-09-2004
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por ciscu
...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.
¿Podrías ser más explícito con el error? ¿Qué es un AccessViolation? ¿Un RunTime Error 216? ¿?¿?

Cita:
Empezado por ciscu
...Esto puede deberse a un problema de memoria? Este ordenador tiene 128 MB de RAM!!!
Entiendo que si fuera un problema de la memoria del ordenador te debería pasar con otros programas, si los errores sólo se producen en éste programa de Delphi tiene sentido que sea algo que hay mal en éste programa.

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.
Responder Con Cita
  #4  
Antiguo 08-09-2004
ciscu ciscu is offline
Miembro
 
Registrado: jun 2003
Ubicación: Granollers
Posts: 114
Poder: 21
ciscu Va por buen camino
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
Los formularios los abro mediante
Código:
Formx.ShowModal
por tanto, la ocupación de memoria tiene que ser constante ya que no puedo cargar más de dos formularios a la vez.

Podéis seguir ayudándome?

Gracias de antemano
Responder Con Cita
  #5  
Antiguo 08-09-2004
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Revisa que creas y liberas correctamente las ventanas según este hilo
Responder Con Cita
  #6  
Antiguo 08-09-2004
CHiCoLiTa CHiCoLiTa is offline
Miembro
 
Registrado: may 2003
Posts: 102
Poder: 21
CHiCoLiTa Va por buen camino
yo particularmente los hago del siguiente modo

Código Delphi [-]
        Form1 := TForm1.Create(Self);
        try
           Form1.ShowModal;
        finally
           FreeAndNil(Form1);
        end;

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
Responder Con Cita
  #7  
Antiguo 08-09-2004
burasu burasu is offline
Miembro
 
Registrado: may 2003
Ubicación: Cádiz - España
Posts: 183
Poder: 21
burasu Va por buen camino
Talking

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;
Con esta forma evito crear y cerrar y terminar perdiendome. Así siempre que abro la ventan se que terminaré cerrandola.
Responder Con Cita
  #8  
Antiguo 09-09-2004
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Cita:
Empezado por burasu

Código:
  try
        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;
   finally
                Free;
   end;
        end;
He añadido el try finally para hacer más seguro el bloque. Si hay algún tipo de excepción mientras se muestra la ventana, que libere la ventana.

Y supongo que la variable que crea Delphi en la unidad de la ventana
Código Delphi [-]
var Form_Pantalla: TForm_Pantalla;
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
Responder Con Cita
  #9  
Antiguo 09-09-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 24
__cadetill Va por buen camino
Pues con permiso del personal, yo añadiré un try...except al código propuesto

Código Delphi [-]
resourcestring
  errCreatingForm = 'Error en la aplicación. Mensaje de error'#13#13'%s';

implementation

..............

Form1 := TForm1.Create(Self);
try
  try
    Form1.ShowModal;
  finally
    FreeAndNil(Form1);
  end;
except
  on E: Exception do
    Application.MessageBox(PChar(Format(errCreatingForm, [E.Message])), 'Atención', MB_OK);
end;

Es que me gusta ver el tipo de excepción lebantada en una pantallita controlada po mi, manias de uno, ya véis

Responder Con Cita
  #10  
Antiguo 09-09-2004
burasu burasu is offline
Miembro
 
Registrado: may 2003
Ubicación: Cádiz - España
Posts: 183
Poder: 21
burasu Va por buen camino
Si efectivamente Lepe, esta variable
Código:
var Form_Pantalla: TForm_Pantalla;
la elimino, ya que no la utilizo para nada.

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.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 20:43:27.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi