Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-06-2007
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
Liberar Memoria

Existe alguna forma en la que yo, en determinado momento pueda liberar memoria RAM? Es que estoy trabajando una aplicacion que copia archivos (bmp y jpg) en cantidades del orden de las 1000 imagenes. Y si son muchas, me tira error de "Division by Zero" y la maquina se me queda sin memoria.

Saludos
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
  #2  
Antiguo 28-06-2007
Avatar de Bicho
[Bicho] Bicho is offline
Miembro Premium
 
Registrado: jul 2003
Ubicación: Inca - Mallorca
Posts: 1.776
Poder: 22
Bicho Va por buen camino
Hola mamu,

quizá éste link pueda ayudarte.

Saludos
Responder Con Cita
  #3  
Antiguo 28-06-2007
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
Cita:
Empezado por Bicho
Hola mamu,

quizá éste link pueda ayudarte.

Saludos
Es interesante, pero en mi caso poco efectivo. Yo tengo un JvThumbView1, al cual le dibujo los thumbnails por codigo, creados a partir de TFrames, ya que los thumbnails de este componente no tienen CheckBox y yo lo necesitaba. La cuestion es que al numero de TFrame 230 creado ya me salta Floatting Pointer Division by Zero, en todos los demas restantes que va creando (unos 356 en total y a veces mas, pueden llegar a ser 1000) y la verdad es que no se como solucionarlo. Probe ocultando todo hasta que termine de crearse, pero es lo mismo. No se me ocurre que hacer.

Saludos
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
  #4  
Antiguo 28-06-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Tendrás que averiguar qué rutina es la que lanza la excepción y por qué ocurre.

En tools -> options -> debugguer activa la casilla "Notify on Language Exception". Ejecuta el programa y al lanzar la excepción el depurador de delphi se parará, irá al código que está provocando la excepción. Mira el Call Stack (View -> debug -> Call Stack) donde verás las últimas llamadas que se han producido, así sabrás las últimas rutinas que se han ejecutado y que han lanzado la excepción.

Un buen punto para buscar, quizás sea donde se haga alguna división.

Quizás si muestras el código que usas para crear los Frames y eliminarlos de memoria, podamos ver algún error.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #5  
Antiguo 28-06-2007
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
La excepcion que me tira es:

Código Delphi [-]
EOutOfResource con el mensaje "Espacio de almacenamiento insuficiente para precesar este comenado"

La rutina afectada, en la que se prucude el error es:

Código Delphi [-]
 if PageControl2.TabIndex=1
    then begin
      Timer1.Enabled:=True;
      Timer2.Enabled:=False;
      TheTop:=0;
      h:=0; //horizontal
      Cant:=Lista.Count;
      m:=0; //seleccionados
   try
      for g:=0 to Lista.Count-1 do
        begin
          LiberarMemoria;
          Thumb:=TThumb.Create(Main.JvThumbView1);
          Thumb.DoubleBuffered:=True;
          Thumb.Name:='Thumb'+IntToStr(g);
          //Thumb.Panel1.Caption:='# '+IntToStr(g+1);
          Thumb.Panel1.Caption:=ExtractFileName(Lista.Strings[g]);
          Thumb.dxCheckbox1.Checked:=ListView1.Items.Item[g].Checked;
          if ListView1.Items.Item[g].Checked=True
            then m:=m+1 else m:=m;
          Thumb.JvThumbnail1.FileName:=Lista.Strings[g];
          Thumb.JvThumbnail1.Title:=Resolucion(Lista.Strings[g]);
          Thumb.Left:=((h+1)-1) * Thumb.Width;
          if Thumb.Left=720
            then begin
                  TheTop:=TheTop+Thumb.Height;
                  Thumb.Left:=0;
                  h:=0;
                 end;
          Thumb.Top:=TheTop;
          Thumb.Parent:=Main.JvThumbView1;
          h:=h+1;
       end;
    except
    end;

Los Tframes (Thumbsnails) son:

Código Delphi [-]
unit Unit3;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
  Dialogs, dxCore, dxCheckCtrls, ExtCtrls, JvExExtCtrls, JvBaseThumbnail,
  JvThumbnails;
type
  TThumb = class(TFrame)
    JvThumbnail1: TJvThumbnail;
    Panel1: TPanel;
    dxCheckbox1: TdxCheckbox;
  private
    procedure SetSelected(const Value: Boolean);
    function GetSelected: Boolean;
    { Private declarations }
  public
    { Public declarations }
    property Selected:Boolean read GetSelected write SetSelected;
  end;
 
implementation
{$R *.dfm}
{ TThumb }
function TThumb.GetSelected: Boolean;
begin
  Result := dxCheckBox1.Checked;
end;

procedure TThumb.SetSelected(const Value: Boolean);
begin
  dxCheckBox1.Checked := Value;
end;
end.

No se donde ni porque esta el error. Al cargar el Frame numero 230 siempre salta el error y tengo que crear 1 por cada foro, estoy probando con 356 fotos.

Saludos
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
  #6  
Antiguo 28-06-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Un detalle:

El bucle lo haces sobre la variable "Lista" (que supongo es un TStringList) y para recorrerlo usas la variable "g", pero dentro del bucle, accedes a un ListView1 con esa misma variable "g":
Código Delphi [-]
Thumb.dxCheckbox1.Checked:=ListView1.Items.Item[g].Checked;
          if ListView1.Items.Item[g].Checked=True

¿estan sincronizados Lista y ListView1? es decir, ¿ambos tienen el mismo número de elementos?

La excepción que da ahora, EOutOfResources si es por falta de recursos y es totalmente distinto a la anterior.

OFFTOPIC: Yo dejé de usar "LIberarMemoria", ya que producía efectos colaterales (errores de memoria varios), al dejar de usar esa rutina, se solucionaron los errores.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #7  
Antiguo 28-06-2007
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
Los elementos estan sicronizados de hecho, el ListView se carga de la misma lista. El liberar memoria, lo agregue depues como prueba, pero con o sin el pasa exactamente lo mismo. Y ambis tienen el mismo numero de elementos.

Saludos.
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
Respuesta



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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Liberar memoria luiggixD Varios 1 02-01-2007 11:22:35
Liberar memoria Sick boy Varios 6 02-07-2005 10:11:29
Liberar Memoria JoseQ Varios 6 16-07-2004 18:49:21
Liberar memoria de un QR. mlara Impresión 1 21-02-2004 18:31:16
Liberar Memoria susje Varios 3 31-07-2003 23:18:18


La franja horaria es GMT +2. Ahora son las 21:30:59.


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