Serio Problema Hellp !!!! - Avançado !!!!

11/08/2003

1

Pessoal é um prazer fazer parte desta comunidade !!!

Ai vai

Tenho uma aplicação toda em Kylix com interbase , mas estou com serios problemas de memoria em minha aplicação ! .

A aplicação e toda grafica , e tenho diversas telas , mas tem um problema quando carrego uma tela ela aloca em memoria , mas quando saio da tela dou um CAFREE mas não descarrega ! a tela fechada se mantem em memoria !!! isso , esta ferrando a aplicaçÃo ..

Aguardou um help e agradeço desde já !!!


Responder

Posts

19/08/2003

Andredelfino

esperimente criar os forms apenas em modo de execucao e então vai opçoes e remova todos os forms criados na inicialização do projeto (ou vai ao arquivo .dpr e remova as linha de criação de form ), deixe apenas o form principal e o data module, assim quando precisar abrir voce cria o form e chama com form.showmodal e ao sair ou seja na linha debaixo limpe a memoria com feeandnill(form);
Ex:

if form2 = nil then
application.createform(tform2,form2);
form2.showmodal;
freeAndNill(form2);

espero ter colaborado.
boa sorte


Responder

20/08/2003

Freina

Cara não funcionou !!! sempre que navego entre as telas ele deixa de 100K a 200K residentes !! tenho varios jpgs carregando na form , sera isso !? que fica em memoria ?!!!

Isso tá me deixando louco !!!!!

HELLP !!!!


Responder

20/08/2003

Allen74

freina, o problema pode estar na forma com que você está carregando os arquivos JPG.

Se tiver como, poste aqui o trecho de código onde você faz a carga dos arquivos e também trechos onde você cria e destrói objetos dentro de seu formulário, geralmente nos eventos OnCreate e OnDestroy.


Responder

22/08/2003

Freina

Eu carrego os JPEG no evento OnShow do formulario... Acontece que esses componentes images fazem a funcão de botões do sistema... É assim que eles sao carregados:

Chamada do Formulario: // os formularios sao chamados a partir do evento on click de um objeto TImage...
OnImageClick
begin
if nome_form = nil then
Application.CreateForm(tnome_form, nome_form);
nome_form.Show;
end;


OnFormShow;
begin
Image1.Picture.LoadFromFile(´botao.jpg´) Image2.Picture.LoadFromFile(´botao.jpg´)
Image3.Picture.LoadFromFile(botao.jpg´)
end;

OnFormClose;
begin
Action := CaFree;
nome_form := nil;
end;

Ja tentei dar um Free no TImage mas comecou a dar Access Violation na recarga do formulario...


Responder

28/08/2003

Freina

ninguem sabe ??????


Responder

30/08/2003

Paulopapesso

Esta dica é de um tutorial

624 -A melhor maneira de liberar um form da memoria
Quando você usa Form.Free ou Form.Destroy, você está imediatamento solicitando a destruição do formulário. Com Form.Release, todas as mensagens pendentes no pool do formulário são postadas - exemplo: redesenho do formulário, movimento do mouse, pressionamento de tecla,...

use assim:

FormXX := TFormXX.create ( application );
try
FormXX.ShowModal
finally
FormXX.Release;
FormXX := nil;
end;

boa sorte!


Responder

01/09/2003

Freina

Estou começando a desconfiar do potencial , do Kylix 3 ,


Responder

01/09/2003

Allen74

freina,

Não acho que seja um problema do Kylix. O problema pode estar em algum código de alocação de memória.

Vamos por partes:

1 - Você removeu da lista de Auto-create forms todos os formulários que você cria dinamicamente via código? (Application.CreateForm).

2 - Você cria algum outro componente dinamicamente dentro do formulário?

3 - Ao navegar entre os formulários, são perdidos de 100K a 200K de memória quando você alterna os formulários já abertos ou somente quando você abre um formulário que ainda não estava visível?

Se puder, poste o código do menor destes formulários que contém imagens, ou então mande para meu e-mail se preferir. Você já verificou se ao fechar o programa a memória que antes estava perdida é devolvida ao Sistema Operacional?


Responder

02/09/2003

Freina

Quando fecho o executavel , a memoria é devolvida ao sistema.

Só o formPricipal e os data modules estão na lista de forms .

Não crio nem um componente dinamicamente , ´so as imagens , são carregadas automaticamente , mas quando dou um close no form ´teoricamente isso tinha que sair da memoria junto com o form ´.


Exemplo de navegação !

Fom1 = 100 kb de uso em memoria
Form1 abro o form2 = 200 k de uso em memoria
form2 fecho o form2 e retorno para o form1 = 200k de memoria.



Eu carrego os JPEG no evento OnShow do formulario... Acontece que esses componentes images fazem a funcão de botões do sistema... É assim que eles sao carregados:

Chamada do Formulario: // os formularios sao chamados a partir do evento on click de um objeto TImage...
OnImageClick
begin
if nome_form = nil then
Application.CreateForm(tnome_form, nome_form);
nome_form.Show;
end;


OnFormShow;
begin
Image1.Picture.LoadFromFile(´botao.jpg´) Image2.Picture.LoadFromFile(´botao.jpg´)
Image3.Picture.LoadFromFile(botao.jpg´)
end;

OnFormClose;
begin
Action := CaFree;
nome_form := nil;
end;


Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira