ReportMemoryLeaksOnShutdown: Memory Leak em Delphi
Estou usando Delphi 2007 e o meu Dpr esta assim:
program Project1;
Da Memory Leak ??????? ReportMemoryLeaksOnShutdown
PQ ???
obs: Não tem nada no Form ... O Projeto esta Vazio , digamos assim
program Project1;
uses Forms, SysUtils, Unit1 in ´Unit1.pas´ ; {$R *.res} begin ReportMemoryLeaksOnShutdown := True; Application.Initialize; Application.MainFormOnTaskbar := True; Application.CreateForm(TForm1, Form1); Application.Run; datetostr(date); end.
Da Memory Leak ??????? ReportMemoryLeaksOnShutdown
PQ ???
obs: Não tem nada no Form ... O Projeto esta Vazio , digamos assim
Marco Salles
Curtidas 0
Respostas
Afarias
28/09/2009
Qual a mensagem (relatório) do memory leak?
T+
T+
GOSTEI 0
Marco Salles
28/09/2009
13-20 Bytes:String x1
GOSTEI 0
Joaoshi
28/09/2009
Esta linha é o problema:
datetostr(date);
GOSTEI 0
Osocram
28/09/2009
Marco Salles.
Da a impressão que essa linha
acabou alocando o resultado em memoria em algum lugar, mais provavel que foi no ´limbo´.
E como antes de fechar o projeto tinha algo em memoria ele deu memory leak
Da a impressão que essa linha
datetostr(date);
acabou alocando o resultado em memoria em algum lugar, mais provavel que foi no ´limbo´.
E como antes de fechar o projeto tinha algo em memoria ele deu memory leak
GOSTEI 0
Marco Salles
28/09/2009
Tá , mas mesmo trocando de lugar , continua a mesma mesnagem
uses Forms, SysUtils, Unit1 in ´Unit1.pas´ ; {$R *.res} begin ReportMemoryLeaksOnShutdown := True; datetostr(date); /////////////Colocando aqui oooo Application.Initialize; Application.MainFormOnTaskbar := True; Application.CreateForm(TForm1, Form1); Application.Run; end.
GOSTEI 0
Afarias
28/09/2009
|datetostr(date);
o q exatamente esta linha de comando faz?? não parece fazer sentido algum
T+
o q exatamente esta linha de comando faz?? não parece fazer sentido algum
T+
GOSTEI 0
Marco Salles
28/09/2009
datetostr(date);
o q exatamente esta linha de comando faz?? não parece fazer sentido algum
Nenhum sentido ...
para quem quiser simular o erro , fica mais fácil
claro que meu dpr original é bem mais complexo . Mas fui depurando e no
gargalho cheguei a esta Instrução ... Então para facilitar a comunicação so
coloquei a instrução que esta dando Memory Leak para que outros atestem
e deem a opinião , simulando a experiencia em suas resptivas máquinas
GOSTEI 0
Afarias
28/09/2009
Se vc atribuir o valor da função a uma variável STRING (AnsiString) ainda assim recebe a mensagem de memory leak ?
VariavelString := DateToStr(Date);
??
T+
VariavelString := DateToStr(Date);
??
T+
GOSTEI 0
Marco Salles
28/09/2009
com AnsiString e com String Somente . com Showmessage e sem
Showmessage .
Algume ja simulou este codigo no Delphi2007 ???
Showmessage .
program Project1; uses Forms, SysUtils, dialogs, Unit1 in ´Unit1.pas´ ; {$R *.res} var mens:String; begin ReportMemoryLeaksOnShutdown := True; mens:=Datetostr(date); Showmessage(mens); Application.Initialize; Application.MainFormOnTaskbar := True; Application.CreateForm(TForm1, Form1); Application.Run; end.
Algume ja simulou este codigo no Delphi2007 ???
GOSTEI 0
Afarias
28/09/2009
Pelo fato de ´long strings´ terem a memória dinamicamente alocada e de-alocada no Delphi (via sistema de reference-counting) somado a forma como o Delphi trata as variáveis globais (digamos q... ´soma 1 ao número de referências´) este ´estranho memory leak´ pode ser reportado.
Isto teoricamente ocorre apenas para strings como variáveis globais atribuídas por funções (que retornam string). Exatamente o seu caso.
Entretanto isto não é um memory leak real. Com o encerramento do processo a memória será devolvida ao SO como parte do sistema de ´finalização´ do Delphi voltado para variáveis globais -- apenas que o gerenciador de memória (FastMM) não toma conhecimento, e assim reporta como memory leak
T+
Isto teoricamente ocorre apenas para strings como variáveis globais atribuídas por funções (que retornam string). Exatamente o seu caso.
Entretanto isto não é um memory leak real. Com o encerramento do processo a memória será devolvida ao SO como parte do sistema de ´finalização´ do Delphi voltado para variáveis globais -- apenas que o gerenciador de memória (FastMM) não toma conhecimento, e assim reporta como memory leak
T+
GOSTEI 0
Afarias
28/09/2009
+1 coisa... não sei se pq a partir do D2006 quando o FastMM foi incluído no Delphi deixou de ser necessário mas a unidade do FastMM fosse incluida explicitamente na uses do DPR.
Ela deve ser sempre a primeira da uses no DPR ou diversos memory leaks falsos são reportados.
Imagino q no D2007 a IDE/compilador inclua automaticamente mas, se não tiver certeza, coloque explicitamente.
Tb verifique se o seu Delphi/FastMM está atualizado.
T+
Ela deve ser sempre a primeira da uses no DPR ou diversos memory leaks falsos são reportados.
Imagino q no D2007 a IDE/compilador inclua automaticamente mas, se não tiver certeza, coloque explicitamente.
Tb verifique se o seu Delphi/FastMM está atualizado.
T+
GOSTEI 0
Vinicius Silva
28/09/2009
Estou usando Delphi 2007 e o meu Dpr esta assim:
program Project1;
Da Memory Leak ??????? ReportMemoryLeaksOnShutdown
PQ ???
obs: Não tem nada no Form ... O Projeto esta Vazio , digamos assim
program Project1;
uses Forms, SysUtils, Unit1 in ´Unit1.pas´ ; {$R *.res} begin ReportMemoryLeaksOnShutdown := True; Application.Initialize; Application.MainFormOnTaskbar := True; Application.CreateForm(TForm1, Form1); Application.Run; datetostr(date); end.
Da Memory Leak ??????? ReportMemoryLeaksOnShutdown
PQ ???
obs: Não tem nada no Form ... O Projeto esta Vazio , digamos assim
Como fazer gravar o log com os memory leaks encontrados? Por que ativando o ReportMemory ele so exibe um dialog quando fecha a aplicação.
GOSTEI 0