Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Jônata Abreu

Limpando Memória Ram

Recommended Posts

Prezados amigos programadores,

 

Tenho um programa desenvolvido em Delphi 7 e access que é utilizado pelos representantes da empresa em que trabalho,

esse programa é usado por varios representantes, e ele faz uma atualização dos dados baixando arquivos de um endereço FTP.

Era um passo a passo que cada representante executava uma ou duas vezes por dia.

 

Acontece que decidi fazer essa atualização de forma automática, e coloquei para executar o passo a passo no com um timer no oncreate do

form principal, e deu certo, testei por dias o programa e ficou uma maravilha, passei para alguns representantes testarem e beleza, aprovado.

 

Como funciona a atualização:

No oncreate do Form principal, chamo um timer

No timer dou um create no formulario de atualização

No formulario de atualização tem um outro timer que faz o passo a passo abaixo:

 

Timer1.Enabled := false;

if Menugeral.automatico = 1 then

begin

informacao.Caption := 'Conectando ao servidor...';

botao02.Click;

informacao.Caption := 'Transferindo todos os arquivos...';

botaotudo.Click;

informacao.Caption := 'Deconectando ao servidor...';

botao05.Click;

informacao.Caption := 'Processando arquivos recebidos...';

botaoprocessar.click;

end;

menugeral.automatico := 0;

ftpmain.Close;

 

Depois disso passei para todos os representantes e agora vários deles, no final da atualização, recebem a mensagem de Access Violation.

Fiz muitos testes alterei a forma de destruir o formulario de atualização (.free .destroy FreeAndNil)mas nada resolveu, e depois de muito lutar

descobri que quando estou usando muita memória do PC esse Access violation aparece(tive que fazer aparecer na minha maquina), senão a atualização acontece normalmente nenhum erro. Usei o Memory Improev Master para liberar memória, sempre que utilizo ele e depois atualizo o programa, a atualização funciona 100% mas se está com muita memória em uso, não adinta o sistema atualiza mas da o Access violation. Espero não ter enrrolado muito para explicar a situação.

 

Então depois de toda essa história pergunto:

de que forma, pelo Delphi 7, eu "limpo" a memória do PC, tirando tudo o que está na memória mas não está em uso?

Ou ainda de que outra forma posso resolver esse problema? aceito suguestões...

 

Atenciosamente

Jônata Abreu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma forma seria setar nil as variáveis, mas depende de quais são os tipos de dados. O que acho que você pode fazer é melhorar o uso de memória do seu sistema na rotina que processa os dados recebidos...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma forma seria setar nil as variáveis, mas depende de quais são os tipos de dados. O que acho que você pode fazer é melhorar o uso de memória do seu sistema na rotina que processa os dados recebidos...

 

Bdexterholland,

 

Como eu poderia fazer para melhorar o uso da memória?

Eu fiz uma alteração, coloquei uma pausa de 2 segundos entre cada processo, mas não adiantou. Usei o comando Sleep.

Realmente não sei o que fazer.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isto é relativo, depende muito de como está seu source, teria que analisar o desenrolar do programa, mas posso sugerir a princípio é:

* verificar o uso de memória do software durante o download, pelo gerenciador de tarefas;

* considerar tamanho dos tipos de dados utilizados (se int int64 não seria melhor que integer, ou ao invés de usar integer para contagens de 0 a 10, usar o byte);

* Usar o debbuger (breakpoint e trace info) do delphi para acompanhar o uso das variáveis e dos objetos e assim, acompanhar algum acesso a identificadores destruidos.

* etc...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.