ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Uso de memória crescendo gradativamente.

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
lngweb
Novato
Novato


Registrado: Domingo, 2 de Dezembro de 2012
Mensagens: 90

MensagemEnviada: Sáb Mai 18, 2013 9:34 pm    Assunto: Uso de memória crescendo gradativamente. Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
SrJeff
Aprendiz
Aprendiz


Registrado: Sexta-Feira, 8 de Janeiro de 2010
Mensagens: 289

MensagemEnviada: Dom Mai 19, 2013 12:00 am    Assunto: Re: Uso de memória crescendo gradativamente. Responder com Citação

scriptstr tem que destruir depois de efetuar todos os procedimentos.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Batera
Colaborador
Colaborador


Registrado: Quarta-Feira, 23 de Julho de 2008
Mensagens: 4899
Localização: Maringá

MensagemEnviada: Dom Mai 19, 2013 8:13 am    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
lngweb
Novato
Novato


Registrado: Domingo, 2 de Dezembro de 2012
Mensagens: 90

MensagemEnviada: Dom Mai 19, 2013 8:33 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
Batera
Colaborador
Colaborador


Registrado: Quarta-Feira, 23 de Julho de 2008
Mensagens: 4899
Localização: Maringá

MensagemEnviada: Dom Mai 19, 2013 11:08 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
lngweb
Novato
Novato


Registrado: Domingo, 2 de Dezembro de 2012
Mensagens: 90

MensagemEnviada: Qui Jul 04, 2013 6:50 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
Batera
Colaborador
Colaborador


Registrado: Quarta-Feira, 23 de Julho de 2008
Mensagens: 4899
Localização: Maringá

MensagemEnviada: Qui Jul 04, 2013 7:02 pm    Assunto: Responder com Citação

O que seria esse "updateVinculacao"?
Poderia postar o código?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB