Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
lngweb Novato

Registrado: Domingo, 2 de Dezembro de 2012 Mensagens: 90
|
Enviada: Sáb Mai 18, 2013 9:34 pm Assunto: Uso de memória crescendo gradativamente. |
|
|
Pessoal, eu tenho um projeto aqui, na verdade é um processo sem janela, que eu tô monitorando o uso de memória dele que cresce gradativamente, tipo ao executar começa usando 5 mega e um pouquinho, passadas 2 horas já tá pra lá de 16 mega(imagina em 24 horas), já tentei comentar algumas partes do código pra ver se ia mudar alguma coisa mas sem sucesso, continua aumentando o uso de memória sem estabilizar, o problema é que esse processo tá sendo desenvolvido pra ficar executando 24 horas dentro de um servidor, pra quem quiser dar uma olhada ,o código principal do processo é o seguinte;
Código: | var scriptstr : tstrings;
Retorno : String;
AuxMsgCerca : String;
begin
scriptstr := tstringlist.Create;
while true do
begin
sleep(15000);
query1.Close;
query1.Open;
while not query1.Eof do //loop nos veículos
begin
queryponto.Close;
queryponto.Parameters.ParamByName('IDVEICULO').Value := query1.fieldbyname('IDVEICULO').Value;
queryponto.Open;
query2.Close;
query2.Parameters.ParamByName('IDVEICULO').Value := query1.fieldbyname('IDVEICULO').Value;
query2.Open;
while not query2.Eof do //loop nas cercas vinculadas a cada veículo
begin
scriptstr.Clear;
scriptstr.Add('posicoescerca.length = 0;');
query3.Close;
query3.Parameters.ParamByName('IDCERCAELETRONICA').Value := query2.fieldbyname('IDCERCAELETRONICA').Value;
query3.Open;
while not query3.Eof do //loop nas posições que formam a cerca eletrônica
begin
scriptstr.Add('posicoescerca.push(new google.maps.LatLng('+query3.fieldbyname('LATITUDE').AsString+','+query3.fieldbyname('LONGITUDE').AsString+'));');
query3.Next;
end;
query3.Close;
scriptstr.Add('dentroDaCerca(new google.maps.LatLng('+queryponto.fieldbyname('LATITUDE').AsString+','+queryponto.fieldbyname('LONGITUDE').AsString+'));');
Doc.Parentwindow.ExecScript(scriptstr.Text, 'Javascript');
sleep(20);
Retorno := Trim((Doc.body as IHTMLBodyElement).createTextRange.text);
//furou a cerca. Executar rotina do envio do SMS aqui.
if (query2.fieldbyname('TIPORESTRICAO').AsString <> Retorno) then
begin
if (query2.fieldbyname('OKAUX').AsInteger <> 1) and (query2.fieldbyname('OK').AsInteger <> 1) then
begin
if Retorno = '1' then
AuxMsgCerca := 'ENTROU NA';
if Retorno = '0' then
AuxMsgCerca := 'SAIU DA';
GeraLog('PREZADO CLIENTE, O ALVO "'+query1.fieldbyname('IDENTIFICACAO').AsString+'" '+AuxMsgCerca+' CERCA "'+query2.fieldbyname('DESCRICAOCERCA').AsString+'".');
updateVinculacao('OKAUX', query2.fieldbyname('ID').AsString, '1');
end;
if (query2.fieldbyname('OKAUX').AsInteger = 1) then
begin
updateVinculacao('OK', query2.fieldbyname('ID').AsString, '1');
updateVinculacao('OKAUX', query2.fieldbyname('ID').AsString, '0');
end;
end
else
begin
updateVinculacao('OK', query2.fieldbyname('ID').AsString, '0');
end;
query2.Next;
end;
query2.Close;
query1.Next;
end;
query1.Close;
end;
end; |
Onde eu tô vacilando ali? |
|
Voltar ao Topo |
|
 |
SrJeff Aprendiz

Registrado: Sexta-Feira, 8 de Janeiro de 2010 Mensagens: 289
|
Enviada: Dom Mai 19, 2013 12:00 am Assunto: Re: Uso de memória crescendo gradativamente. |
|
|
scriptstr tem que destruir depois de efetuar todos os procedimentos. |
|
Voltar ao Topo |
|
 |
Batera Colaborador


Registrado: Quarta-Feira, 23 de Julho de 2008 Mensagens: 4899 Localização: Maringá
|
Enviada: Dom Mai 19, 2013 8:13 am Assunto: |
|
|
Concordo com o SrJeff. No final do método você precisa fechar todas as Queries e liberar a TStringList com o FreeAndNil. |
|
Voltar ao Topo |
|
 |
lngweb Novato

Registrado: Domingo, 2 de Dezembro de 2012 Mensagens: 90
|
Enviada: Dom Mai 19, 2013 8:33 pm Assunto: |
|
|
Batera escreveu: | Concordo com o SrJeff. No final do método você precisa fechar todas as Queries e liberar a TStringList com o FreeAndNil. |
Amigos, obrigado por responderem. Embora eu já soubesse que eu problema não era esse pois eu já havia feito esse teste antes e não resolveu, o problema ainda não é isso porque aquele stringlist ali é criado só 1 vez antes de entrar no loop, a aplicação toda se resume nesse loop. As queries também já estão sendo todas fechadas. Mais alguma ideia?
Abc. |
|
Voltar ao Topo |
|
 |
Batera Colaborador


Registrado: Quarta-Feira, 23 de Julho de 2008 Mensagens: 4899 Localização: Maringá
|
Enviada: Dom Mai 19, 2013 11:08 pm Assunto: |
|
|
lngweb, você tem certeza que o vazamento de memória ocorre neste código que você postou?
Talvez possa estar acontecendo em outra rotina... |
|
Voltar ao Topo |
|
 |
lngweb Novato

Registrado: Domingo, 2 de Dezembro de 2012 Mensagens: 90
|
Enviada: Qui Jul 04, 2013 6:50 pm Assunto: |
|
|
Batera escreveu: | lngweb, você tem certeza que o vazamento de memória ocorre neste código que você postou?
Talvez possa estar acontecendo em outra rotina... |
Exatamente nesse código Batera. Peço desculpas pela demora na resposta, tive ausente por um tempo pois estava trabalhando e focado em outra parte do projeto.
Abc. |
|
Voltar ao Topo |
|
 |
Batera Colaborador


Registrado: Quarta-Feira, 23 de Julho de 2008 Mensagens: 4899 Localização: Maringá
|
Enviada: Qui Jul 04, 2013 7:02 pm Assunto: |
|
|
O que seria esse "updateVinculacao"?
Poderia postar o código? |
|
Voltar ao Topo |
|
 |
|