Fórum Aplicação consumindo memória #333465
22/11/2006
0
Desenvolvi uma aplicação que faz a leitura de uma tabela do banco de dados a cada 10 segundos e conforme a informação encontrada executa um processo que gera um arquivo .bat, esta aplicação fica rodando em um servidor e na primeira vez que o programa é carregado ocupa 8k de memória. Após uma semana em execução a quantidade passa de 8 para 520k. Alguém sabe como identificar o que esta ocasionando o consumo da memória, será que é a rotina que faz a leitura no banco?
Vi aqui no fórum que não é aconselhável ficar desativando e ativando a conexão com o banco de dados.
Obrigado
Airton
Airoosp
Curtir tópico
+ 0Posts
23/11/2006
Aerreira
Mas ao meu ver esse não é o seu problema, que na verdade em algum ponto de sua aplicação você criou ou instanciou algum objeto e não o liberou da memória após seu uso. Por menor que seja, com o tempo (você citou uma semana) acaba crescendo bastante.
Imagine um processo qualquer que ´esqueça´ 10 bytes na memória e que seja executado a cada 10 segundos durante uma semana, fazendo as contas o processo terá executado por 60480 vezes, 10 bytes cada vez que ficarão acumulados na memória, terá 604800 bytes, ou seja, 590k.
O duro é descobrir o que está largando esse rastro....
Gostei + 0
23/11/2006
Airoosp
A aplicação foi desenvolvida no Delphi 6 e acessa banco Oracle 8.1.7, funciona da seguinte forma:
Ao executar o aplicativo é feita a conexão com o banco de dados e habilitado o evento timer que é executado a cada 10 segundos, fazendo uma pesquisa em uma tabela do banco.
Caso o conteúdo de um campo seja S, os dados retornados no select são utilizados na criação de um arquivo .bat que é executado pela aplicação.
O objetivo da aplicação é ficar monitorando a tabela e criar o arquivo .bat conforme condição descrita acima.
Entendi o que você disse, mas fechar a abrir a conexão com o banco poderá causar uma lentidão na execução não é?
Obrigado
Airton
Gostei + 0
23/11/2006
Aerreira
Já revisou seu programa à busca de algo que, sem querer, esqueceu na memória? Algo que esteja público desnecessariamente e que fica acumulando ao longo das diversas execuções a cada 10 segundos?
A questão de abrir e fechar o banco, ao meu ver é o mais correto, porém vale você fazer uns testes para ver no que isso irá impactar em termos de perfórmance.
Gostei + 0
23/11/2006
Luizf2
Já passei por este problema.
E, após muita pesquisa, descobri que este é um problema do Windows e não da aplicação.
Acontece que, quando você libera memória na sua aplicação, o Windows não libera esta memória, e a aplicação fica com a memória crescendo infinitamente.
É bom lembrar que esta alocação/liberação de memória nem sempre se dá de forma explícita, ou seja, você nem sempre controla isso, como é o caso dos componentes da VCL.
No meu caso, tenho várias aplicações rodando numa mesma máquina que ficam coletando dados de campo.
Fiz vários testes usando ponteiros e também sem usar um ponteiro sequer, e era sempre o mesmo problema.
Tem duas coisas que minimizam o problema, ou seja, diminuem sensivelmente o crescimento de memória: procure usar o tipo ´string´ com tamanho definido ´string[40]´ ou ´string[255]´ enfim, qualquer tamanho fixo, outro detalhe é o uso de ´threads.
Mesmo fazendo estas alteações o problema continuou, apesar de o crescimento de memória ter diminuido.
Não encontrei nenhuma solução para a aplicação em si.
Num primeiro momento, tentei usar o ´Application.Minimize´, mas esta solução não se mostrou eficiente com o decorrer do tempo.
Então veio a solução tupiniquim que resolveu e que está rodando até hoje, já fazem 5 anos.
Criei uma outra aplicação que, de tempos em tempos, fecha as aplicações coletoras e as coloca no ar novamente, chamei a aplicação de ´Monitor´. Como já disse foi uma solução tupiniquim mas que resolveu o problema.
Em tempo, este problema ocorre também no Linux, com o qual também já fiz testes usando o Kylix, e no Unix, que não testei mas que descobri nas minhas pesquisas.
Espero que tenha lhe ajudado de alguma forma.
Luiz Fernando
PS: Se você quiser o programa ´Monitor´, entre em contato que lhe mando os fontes.
Gostei + 0
23/11/2006
Massuda
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)