Autor Téma: New - Dispose ... jak si ohlídat, že se na nic nezapomene?  (Přečteno 888 krát)

Offline age.new

  • Hrdina
  • ****
  • Příspěvků: 316
  • Karma: 0
Vážená komunito,

mám dva spojité seznamy, jeden co se plní z formuláře a druhý běží ve vláknu, napojuje na sebe ten první a pak se zapisuje do souboru. Princip není až tak důležitý. Alokace položky přes New se provádí v jiné části kódu než Dispose. Nechal jsem aplikaci běžet přes noc a  paměť vzrostla z 249MB na 270MB. Když aplikaci vypnu a opět zapnu, začne paměť na 249MB a velmi pomalinku narůstat. Jelikož je jeden prvek seznamu relativně malý, tak se patrně někde neprovede Dispose...

Otázka - je nějaký způsob. jak zjistit zda mi někde nevznikají "memory-leaky"?

Děkuji.
 

Offline age.new

  • Hrdina
  • ****
  • Příspěvků: 316
  • Karma: 0
Re:New - Dispose ... jak si ohlídat, že se na nic nezapomene?
« Odpověď #1 kdy: 11-03-2020, 08:25:16 »
Update: ... dal jsem si čítače na všechny New a Dispose procedury a po cca 1 hodině provozu byly obě hodnoty stejné! ... patrně tedy nedochází k memory-leakům i když aplikace v paměti narůstá (ale jen velmi pozvolna).

Dotaz: u Delphi 6 a 7 jsem používal FastMM, který v debug režimu dokázal vypsat neuvolněnou paměť. Má novější Delphi (DX) již něco v sobě a nebo si musím nainstalovat FastMM?

Děkuji

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 6163
  • Karma: 44
    • Verze Delphi: W10 + D11
Re:New - Dispose ... jak si ohlídat, že se na nic nezapomene?
« Odpověď #2 kdy: 11-03-2020, 09:14:37 »
V XE7 treba "nainštalovať".
W10 64b, Delphi 10.4, FireBird 3.08
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3343
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:New - Dispose ... jak si ohlídat, že se na nic nezapomene?
« Odpověď #3 kdy: 11-03-2020, 10:04:33 »
Otázka - je nějaký způsob. jak zjistit zda mi někde nevznikají "memory-leaky"?
Novejsi (uz docela dlouho) verze pouzivaji FastMM jako vlastni memory manager, takze staci v .dpr hned za begin napsat napr.
Kód: Delphi [Vybrat]
  1.   ReportMemoryLeaksOnShutDown := IsDebuggerAttached;
a pri exitu aplikace to v pripade memory leaku zobrazi dialog s jejich seznamem.

Ale pro detailni log je treba nainstalovat a vhodne nakonfigurovat FastMM.

Offline age.new

  • Hrdina
  • ****
  • Příspěvků: 316
  • Karma: 0
Re:New - Dispose ... jak si ohlídat, že se na nic nezapomene?
« Odpověď #4 kdy: 11-03-2020, 10:26:09 »
Ano, to jsem našel i zde: http://docwiki.embarcadero.com/RADStudio/Rio/en/Configuring_the_Memory_Manager

Zkoušel jsem i ReportMemoryLeaksOnShutDown, ale nikdy to nic neukázalo a tak jsem předpokládal, že to nefunguje. Znamená to tedy, že když se nic neobjeví, tak to funguje, ale žádný memory-leak se neobjevil?

Děkuji.

Offline chaloup

  • Plnoletý
  • ***
  • Příspěvků: 113
  • Karma: 11
    • Verze Delphi: Delphi 10.2
Re:New - Dispose ... jak si ohlídat, že se na nic nezapomene?
« Odpověď #5 kdy: 12-03-2020, 11:34:20 »
https://github.com/pleriche/FastMM4

Place this unit as the very first unit under the "uses" section in your project's .dpr file.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3343
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:New - Dispose ... jak si ohlídat, že se na nic nezapomene?
« Odpověď #6 kdy: 12-03-2020, 17:16:46 »
Zkoušel jsem i ReportMemoryLeaksOnShutDown, ale nikdy to nic neukázalo a tak jsem předpokládal, že to nefunguje.
Tak na to stacilo nekde zakomentovat xxx.Free(); nebo nekam pridat napr.  dummy TStringList.Create(); a hned bys vedel, ne?

Offline age.new

  • Hrdina
  • ****
  • Příspěvků: 316
  • Karma: 0
Re:New - Dispose ... jak si ohlídat, že se na nic nezapomene?
« Odpověď #7 kdy: 13-03-2020, 07:36:04 »
Ano ... to mě nenapadlo :) .. vyzkouším