Wyciek pamięci Indy 10

MR
  • Rejestracja: dni
  • Ostatnio: dni
0

Mam wyciek pamieci w komponencie IdTCPClient Indy 10. Wyciek jest w plik project1.lpr line 18

Application.Initialize;

Kopiuj
program project1;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  {$IFDEF HASAMIGA}
  athreads,
  {$ENDIF}
  Interfaces, // this includes the LCL widgetset
  Forms, unit1, indylaz
  { you can add units after this };

{$R *.res}

begin
  RequireDerivedFormResource:=True;
  Application.Scaled:=True;
//  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

Pod linuksem wylaczylem Application.Initialize to pomoglo program działa bez Problemów testowalem kilkanasie dni.

Problem pojawia się na Windows 11 nie mogę wyłaczyć Application.Initialize program się nie kompiluje.

Kopiuj
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, IdTCPClient;

type

  { TForm1 }

  TForm1 = class(TForm)
    IdTCPClient1: TIdTCPClient;
  private

  public

  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

end.
         

Przykladowy program nic nie robi a i tak jest wyciek pamięci,
Macie jakieś rady dla mnie?

cerrato
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Poznań
  • Postów: 9012
0

Skąd wiesz, że jest wyciek?
Co się konkretnie dzieje? Masz jakieś komunikaty o błędach/ostrzeżenia?
Chyba powinieneś dać więcej szczegółów.

PD
  • Rejestracja: dni
  • Ostatnio: dni
2

Indy domyślnie ma niewielki wyciek pamięci. Możesz to wyłączyć: https://wiki.freepascal.org/Indy_with_Lazarus#Memory_leaking_issue

MR
  • Rejestracja: dni
  • Ostatnio: dni
0
cerrato napisał(a):

Skąd wiesz, że jest wyciek?
Co się konkretnie dzieje? Masz jakieś komunikaty o błędach/ostrzeżenia?
Chyba powinieneś dać więcej szczegółów.

Kopiuj
Heap dump by heaptrc unit of C:\Users\admin\Desktop\test indy\project1.exe
1134 memory blocks allocated: 1866104/1867176
1131 memory blocks freed : 1865984/1867056
3 unfreed memory blocks: 120
True heap size: 294912 (160 used in System startup) True free heap: 293984
Should be: 294056
Call trace for block $00000000015AB9E0 size 48
$0000000100011CD2
$000000010000EAEA
$00000001001059A5
$000000010033D401 CREATE, line 253 of Core/ldThreadSafe.pas 5000000010033EEB1 IDTHREAD_SS_inits, line 785 of
Core/ldThread.pas
$000000010001118C
$0000000100002F1A $main, line 18 of project1.lpr
$0000000100002FA6
$0000000100017630
$0000000100002EF7
S00007FF91281E8D7
$00007FF9132F14FC
SBAADFOODBAADFOOD
SBAADFOODBAADFOOD
SBAADFOODBAADFOOD
$BAADFOODBAADFOOD
Call trace for block $00000000015AB8E0 size 24
$0000000100011CD2
$000000010000EAEA
$000000010033D3C9
$000000010033EEB1 IDTHREAD_$$_inits, line 785 of Core/ldThread.pas
$000000010001118C
$000



$0000000100002F1A Smain, line 18 of project1 $0000000100002FA6
$0000000100017630
$0000000100002EF7
$00007FF91281E8D7
$00007FF9132F14FC
SBAADFOODBAADFOOD
SBAADFOODBAADFOOD
SBAADFOODBAADFOOD
SBAADFOODBAADFOOD
SBAADFOODBAADFOOD
Call trace for block $0000000001528810 size 48
$0000000100011CD2
$000000010000EAEA
$00000001001059A5
$000000010024505A
$000000010001118C
$0000000100002F1A Smain, line 18 of project1.lpr     
$0000000100002FA6
$0000000100017630
$0000000100002EF7
$00007FF91281E8D7
$00007FF9132F14FC
$0000000100017630
$0000000100002EF7
$00007FF91281E8D7
S00007FF9132F14FC
SBAADFOODBAADFOOD

MR
  • Rejestracja: dni
  • Ostatnio: dni
0
Paweł Dmitruk napisał(a):

Indy domyślnie ma niewielki wyciek pamięci. Możesz to wyłączyć: https://wiki.freepascal.org/Indy_with_Lazarus#Memory_leaking_issue

Sama zmiana w pliku IdCompilerDefines.inc nic pomaga należy ponownie kompilować i zainstalować indy.

Znajdź wszystkie pliki z nazwa IdCompilerDefines.inc na dysku i zmień

Kopiuj
{.$DEFINE FREE_ON_FINAL}
 {$UNDEF FREE_ON_FINAL}

na

 {$DEFINE FREE_ON_FINAL}
 {.$UNDEF FREE_ON_FINAL}

Następnie w Lazarus w menu Package ->Open package File (.lpk), otwieramy plik indylaz.lpk (u mnie na dysku w katalogu c:\Fpcupdeluxe\ccr\indy\Lib), teraz naciśnij Compile a następnie Use->Install.

Po ponownej Instalacji wszystko działa jak powinno.

PD
  • Rejestracja: dni
  • Ostatnio: dni
1
mrmajer napisał(a):

Sama zmiana w pliku IdCompilerDefines.inc nic pomaga należy ponownie kompilować i zainstalować indy.

w artykule jest wspomniane, że konieczna jest ponowna kompilacja pakietu. Można to zrobić tak, jak napisałeś lub przebudować po prostu całe IDE: Menu > Tools > Build Lazarus with Profile: .... Albo będąc w projekcie używającym indy wykonać Menu > Run > Cleanup and Build z zaznaczonymi opcjami Package output directories oraz Package source directories

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.