Autor Téma: Array DML (FireDAC) ->Zostáva neuvoľnená pamäť  (Přečteno 584 krát)

Offline miroB

  • Guru
  • *****
  • Příspěvků: 513
  • Karma: 17
    • Verze Delphi: D1,2,3,4,7,2005,2009, XE8,S,B,T10.2.2 Pro
Re:Array DML (FireDAC) ->Zostáva neuvoľnená pamäť
« Odpověď #30 kdy: 10-07-2019, 16:14:27 »
Práve v tomto je rozdiel medzi IT študovaným a nami ostatnými.
Som osobne ochotný uvažovať o kompromisoch MM vs TM.
Lenže keď si uvedomím, že do hodiny prifrčí študent, ktorý príde na to, že program je nejaký veľký, väčší než obvykle..
Preto na záver pekne radšej zhodím celý DataModule. A budem mať pokoj.
To mi za to určite stojí. Mám iné veci, ktoré musím obhajovať
Nakoniec programy robíme pre bežných ľudí. Nie pre IT fajnšmekerov..
« Poslední změna: 10-07-2019, 16:32:12 od miroB »

Offline miroB

  • Guru
  • *****
  • Příspěvků: 513
  • Karma: 17
    • Verze Delphi: D1,2,3,4,7,2005,2009, XE8,S,B,T10.2.2 Pro
Re:Array DML (FireDAC) ->Zostáva neuvoľnená pamäť
« Odpověď #31 kdy: 11-07-2019, 16:08:36 »
Sklapnul som opätky. Kontroloval som aplikáciu.
Skúsil som to najprv s FastMM4. Ten sa išiel zblázniť. Ja tiež.
Vadí mu aj TZip.Header, ktorý mám úplne oficiálne podľa návodu. Potom UnicodeStringy. Aj TStringList a pod.
Preto som sa poobzeral po fóre. Pozrel som na Stanovu históriu (Dík).
Našiel som najmä:
  • MadExcept - pomohol mi nájsť dve reálne chyby (memory Leak)
  • Eurekalog - už keď som bol vo švungu, vyskúšal som ju tiež. Ani tá už nič nenašla
Upresnenie: Vyskúšal som vzorové chyby z Radkovho článku:
https://delphi.cz/post/Detekce-problemu-za-pomoci-FastMM4.aspx
Oba vyššie uvedené programy tam pekne zabučali. Takže nakonfigurované ich mám správne. Verím, že by tie TStringListy objavili. Ak by tam boli nekorektne. Ako teda ešte stále vypisuje FastMM4.

PS
Task Manager hlási na záver presne takú istú obsadenosť pamäti ako predtým. Čo teda bol môj prvotný impulz pre experimentovanie.
Ale fajn, že som sa naučil používať tie dva šikovné programy.
Ďakujem všetkým za usmernenia.
« Poslední změna: 11-07-2019, 16:11:02 od miroB »

Offline Delfin

  • Padawan
  • ******
  • Příspěvků: 1821
  • Karma: 70
  • SW konzultant
    • Verze Delphi: 2009, Tokyo, Rio
Re:Array DML (FireDAC) ->Zostáva neuvoľnená pamäť
« Odpověď #32 kdy: 11-07-2019, 17:02:47 »
Práve v tomto je rozdiel medzi IT študovaným a nami ostatnými. Som osobne ochotný uvažovať o kompromisoch MM vs TM.

Dobra, tak si muzes napsat vlastni memory manager. Ale s vracenim veskere uvolnene pameti OS nebude tak efektivni jako je ten soucasny (dodavany s Delphi). Ostatne ani garbage collectory modernich jazyku taky ihned nevraci uvolnenou pamet OS. Pameti maji dnesni stroje dostatek k tomu aby se uzivatel musel obavat o jevy jako swapovani na disk. A pokud ma ten uzivatel starost o 100MB blok, mel by spis uvazovat o investici do pametoveho modulu nebo lepe spravovat zbytek bezicich aplikaci.

Pro Tebe jako programatora je samozrejme podstatne nevytvaret memory leaky, coz ovsem neznamena, ze se s kazdym uvolnenim objektu uzivatel (pozorovatel) okamzite docka (s memory managerem dodavanym s Delphi) navraceni bloku pameti OS viditelnym v Task Manageru. Jde o optimalizaci, memory manager neni hloupy.

Rekni tomu uzivateli napr. ze se mu tim setri HW pristup k pameti, cimz dochazi k mensimu opotrebeni stroje (a ze i rychlost se tim zvysi, protoze neni treba tolikrat zatezovat system managementem pametovych bloku).

Ja kdysi navrhoval napr. mapovou aplikaci kde se pro efektivitu kreslilo z PNG dlazdic na bitmapove platno a ta aplikace mohla mit nekolik takovych zalozek (bitmap). Tam bylo treba dbat na vyuziti pameti, protoze velikosti monitoru jsou na dispecerskych stanicich pouzivajicich tyto aplikace velke, tady je nejakych 100MB zrnko ryze. Pokud tedy nejde o memory leak...
« Poslední změna: 11-07-2019, 17:20:27 od Delfin »
I'm a soldier, so don't panic! I know the underground! I like the WTFPL license! No more Google, go duck, go!

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4338
  • Karma: 38
    • Verze Delphi: XE7 professional
Re:Array DML (FireDAC) ->Zostáva neuvoľnená pamäť
« Odpověď #33 kdy: 11-07-2019, 17:20:37 »
Len taká pripomienka: Ak zabudneš zlikvidovať napr. TFDQuery, tak Ti to FMM4 vypíše a k tomu Ti hodí kopu ďalších vecí. Aj ten TStringList. Uvoľníš TFDQuery a odrazu je všetko čisté 8)
Naučil som sa jeho výpis čítať od konca.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline miroB

  • Guru
  • *****
  • Příspěvků: 513
  • Karma: 17
    • Verze Delphi: D1,2,3,4,7,2005,2009, XE8,S,B,T10.2.2 Pro
Re:Array DML (FireDAC) ->Zostáva neuvoľnená pamäť
« Odpověď #34 kdy: 11-07-2019, 17:25:20 »
Fakt, že tá nevrátená pamäť ma vystrašila.
Zdrojáky len na tento čiastkový účel majú cca 550 kB. (Bez tretích strán).
Je to obrovské množstvo na prípadnú detailnú manuálnu kontrolu.
Bohužiaľ, nepoužíval som doteraz žiadne kontrolné programy.
Iba som vyskúšal prevod z desiatok rôznych excel súborov. Prevod sa zdal byť konečne bezchybný.
Nevrátená pamäť bola však indikátorom možných problémov. Teraz po overení (a oprave), za pomoci MadExcept a EurekaLog som podstatne spokojnejší. Navyše som tú vlastnosť DML Array overil aj kontrolným programom, čo som zavesil tu niekde vyššie. Konečne budem môcť kľudne spať.
« Poslední změna: 11-07-2019, 17:29:10 od miroB »

Offline miroB

  • Guru
  • *****
  • Příspěvků: 513
  • Karma: 17
    • Verze Delphi: D1,2,3,4,7,2005,2009, XE8,S,B,T10.2.2 Pro
Re:Array DML (FireDAC) ->Zostáva neuvoľnená pamäť
« Odpověď #35 kdy: 11-07-2019, 17:28:28 »
Len taká pripomienka: Ak zabudneš zlikvidovať napr. TFDQuery, tak Ti to FMM4 vypíše a k tomu Ti hodí kopu ďalších vecí. Aj ten TStringList. Uvoľníš TFDQuery a odrazu je všetko čisté 8)
Naučil som sa jeho výpis čítať od konca.
Dík, to vyzerá rozumne aj logicky.
Ozaj dá sa vôbec napísať väčší program, kde FastMM4 bude úplne spokojný?
Ten madExcept spolu s EurekaLog nie sú dostatočnou kontrolou?

Offline Delfin

  • Padawan
  • ******
  • Příspěvků: 1821
  • Karma: 70
  • SW konzultant
    • Verze Delphi: 2009, Tokyo, Rio
Re:Array DML (FireDAC) ->Zostáva neuvoľnená pamäť
« Odpověď #36 kdy: 11-07-2019, 17:28:34 »
Takze finalni resume? FireDAC nema memory leak? Nebo? Pokud ano, je treba jej reportovat, ale chapu, toto je expertni diskuze, ne filozoficke forum... Anebo je? Pripada mi ze vy si to tam na vychode od CR vyresite po svem ::) ;D
« Poslední změna: 11-07-2019, 17:31:51 od Delfin »
I'm a soldier, so don't panic! I know the underground! I like the WTFPL license! No more Google, go duck, go!

Offline miroB

  • Guru
  • *****
  • Příspěvků: 513
  • Karma: 17
    • Verze Delphi: D1,2,3,4,7,2005,2009, XE8,S,B,T10.2.2 Pro
Re:Array DML (FireDAC) ->Zostáva neuvoľnená pamäť
« Odpověď #37 kdy: 11-07-2019, 17:34:12 »
Takze finalni resume? FireDAC nema memory leak? Nebo?
Nemyslel som, že FireDAC má memory leak. Myslím, že to som snáď nemohol napísať, lebo ma to ani nenapadlo.
Je pre mňa na záver dôležité vedieť, že pamäť sa síce nevrátila, ale nie je to spôsobené mojou chybou.
Jasne.. vidieť vrátenú celú pamäť by bolo pekné (ušetrilo by mi to aj nejaké tie nervy), ale keď to je "stav techniky", ako rada tvrdí jedna veľká auto firma, tak musím byť spokojný :)
K tomu filozofickému fóru. Ozaj to tak asi vyzerá. Len ti poviem, že keby som si toto mohol prečítať na začiatku, nestratil by som more času. Preto: možno sa ešte niekomu zíde.
Dnes a predtým mnohokrát som použil vyhľadávanie na fóre.. Sú tu niektoré dobré kľúčové slová aj zaujímavé info. Aspoň pre tých, čo sú na hľadanie odkázaní.
« Poslední změna: 11-07-2019, 17:41:31 od miroB »

Offline Delfin

  • Padawan
  • ******
  • Příspěvků: 1821
  • Karma: 70
  • SW konzultant
    • Verze Delphi: 2009, Tokyo, Rio
Re:Array DML (FireDAC) ->Zostáva neuvoľnená pamäť
« Odpověď #38 kdy: 11-07-2019, 18:28:19 »
Nemyslel som, že FireDAC má memory leak. Myslím, že to som snáď nemohol napísať, lebo ma to ani nenapadlo.

Muze mit. Proto se ptam :) Ja ted bohuzel nemam po ruce Delphi abych zkusil ten MCVE projekt. Pro ted tedy jen dve veci, abych tedy odpovedel:

1) Memory manager nemusi okamzite uvolnit pamet OS (kontrola realneho vyuziti pameti pomoci Task Manageru muze byt matouci)
2) Kolekce hodnot parametru zustava po spusteni prikazu v objektu FireDAC zachovana (s urcitou konfiguraci, celkem i verim ze nektery z parametru konfigurace dokaze toto chovani ovlivnit; nejde ovsem o memory leak, ale umysl kvuli perzistenci)
I'm a soldier, so don't panic! I know the underground! I like the WTFPL license! No more Google, go duck, go!

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2569
  • Karma: 132
    • Verze Delphi: D2007, XE3, DX10
Re:Array DML (FireDAC) ->Zostáva neuvoľnená pamäť
« Odpověď #39 kdy: 11-07-2019, 19:19:57 »
2) Kolekce hodnot parametru zustava po spusteni prikazu v objektu FireDAC zachovana (s urcitou konfiguraci, celkem i verim ze nektery z parametru konfigurace dokaze toto chovani ovlivnit; nejde ovsem o memory leak, ale umysl kvuli perzistenci)
Pro podobne ucely by se mel dat pouzit Unprepare, ne?

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2569
  • Karma: 132
    • Verze Delphi: D2007, XE3, DX10
Re:Array DML (FireDAC) ->Zostáva neuvoľnená pamäť
« Odpověď #40 kdy: 11-07-2019, 19:24:51 »
Ozaj dá sa vôbec napísať väčší program, kde FastMM4 bude úplne spokojný?
Urcite, Delphi ma od nejake verze FastMM jako interni memory manager, ktery jen vyhodi dialog (pokud se to zapne), ale pri vyvoji ho pouzivame ve FullDebugMode a nikde nam to nic nereportuje.

A kdyz to nekdy neco reportuje, tak nam to neda spat, dokud ten problem nenajdeme. BTW, leak nebyva jediny problem pri praci s pameti.

Offline Delfin

  • Padawan
  • ******
  • Příspěvků: 1821
  • Karma: 70
  • SW konzultant
    • Verze Delphi: 2009, Tokyo, Rio
Re:Array DML (FireDAC) ->Zostáva neuvoľnená pamäť
« Odpověď #41 kdy: 11-07-2019, 19:38:16 »
2) Kolekce hodnot parametru zustava po spusteni prikazu v objektu FireDAC zachovana (s urcitou konfiguraci, celkem i verim ze nektery z parametru konfigurace dokaze toto chovani ovlivnit; nejde ovsem o memory leak, ale umysl kvuli perzistenci)
Pro podobne ucely by se mel dat pouzit Unprepare, ne?

Nejsem si tim jisty, zminoval jsem to tu, ale nemam ted po ruce zdrojaky, viz:

To je vec, kterou pro Tebe FireDAC neudela (resp. udela tusim s odpripravenim prikazu; pisu z hlavy).

Na SO jsem psal tuto odpoved a ta byla zalozena na zdrojovych kodech, takze pokud se nic nezmenilo, pouhe odpripraveni prikazu nestaci(lo). Ono by to nakonec davalo i filozoficky smysl, protoze by ses mohl napr. po vypadku spojeni pripojit na stejnou databazi, pripravit stejny prikaz a stejne parametry bez pripravy odeslat.
« Poslední změna: 11-07-2019, 19:41:16 od Delfin »
I'm a soldier, so don't panic! I know the underground! I like the WTFPL license! No more Google, go duck, go!

Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 711
  • Karma: 42
    • Verze Delphi: 10.3
Re:Array DML (FireDAC) ->Zostáva neuvoľnená pamäť
« Odpověď #42 kdy: 11-07-2019, 20:56:16 »
Ozaj dá sa vôbec napísať väčší program, kde FastMM4 bude úplne spokojný?

Jestli je přes milion řádek větší program, tak ano :-) Zatím vždy, když FastMM hlásil problém, tak tam problém opravdu byl.

Offline miroB

  • Guru
  • *****
  • Příspěvků: 513
  • Karma: 17
    • Verze Delphi: D1,2,3,4,7,2005,2009, XE8,S,B,T10.2.2 Pro
Re:Array DML (FireDAC) ->Zostáva neuvoľnená pamäť
« Odpověď #43 kdy: 11-07-2019, 21:49:15 »
Ozaj dá sa vôbec napísať väčší program, kde FastMM4 bude úplne spokojný?

Jestli je přes milion řádek větší program, tak ano :-) Zatím vždy, když FastMM hlásil problém, tak tam problém opravdu byl.
Smiem sa opýtať načo sú potom platené programy ako madExcept a EurekaLog?
Som rád, že aj potom, čo som experimentoval s ich nastaveniami, nezahlásili ani ťuk.
Jasne, že mi ten výpis FastMM4 nedá pokoj. Ale mám ešte dokončiť asi 5-násobok.
Teraz si s vylepšovaním dám pauzu.
Inak ozaj rozumná rada prišla od Stana. Začať sledovať ten splašený výpis odzadu. Tým ostatným som zas až tak moc nerozumel.
A ďalšia vec. Jedna vec (maličkosť ) sa opraví a zmiznú ďalšie. Veľké veci odchytia tie profi programy.
Voľakedy primitívne programovacie nástroje, tak pred 20-30 timi rokmi zahltili sami seba chybovými hláškami. Nebolo to jednoduché.
Ozaj neviem čítať hexa kódy akoby som sa s nimi narodil. Preto podobným výpisom moc nerozumiem.
Áno ak by som to testoval od začiatku, bolo by to bez chýb.
Ak viete asembler, fajn. Lenže kúpil som si Delphi a preto nejaký "assembler" moc nechcem používať.

Počujte programátori. Moc by som sa nevyťahoval. Zažil som už divné (i ešte horšie) programy dokonca aj od svetových gigantov. Ak chcete spravím zoznam.
Je silne pravdepodobné, že všetky prešli bez chyby cez FastMM4 a pod.

Pozrite. Nie tak dávno pripojenie na sieť či wifi zvládol každý, Dnes aj 5-ročné decko.
Až budú všetky nástroje tak šikovné, ako dnešné telefóny. Bude to zase kus ľahšie. Tak by to malo byť.
Samozrejme, že bude.

Najbližšie 4 dni som vo 4-hviezdičkovom hoteli na juhu Rakúska. Pretože som 2 mesiace v kuse programoval. Od rána do pol noci.
Zďaleka nielen to, čo tu riešim.

PS
Tiež to bude najmenej 1mega riadkov, čo som vyprodukoval. Ale ako hobby.
Závidím Vám jedno hlavné. Že to robíte v práci.
« Poslední změna: 11-07-2019, 21:58:06 od miroB »

Offline Delfin

  • Padawan
  • ******
  • Příspěvků: 1821
  • Karma: 70
  • SW konzultant
    • Verze Delphi: 2009, Tokyo, Rio
Re:Array DML (FireDAC) ->Zostáva neuvoľnená pamäť
« Odpověď #44 kdy: 11-07-2019, 22:07:11 »
Smiem sa opýtať načo sú potom platené programy ako madExcept a EurekaLog?

Pokud mas maly, jednorazovy projekt, temer k nicemu. Dokud tedy pouzijes predepsane postupy a verohodne knihovny. I ty vsak mohou obsahovat chyby. Ptam se tedy jeste jednou, je toto vlakno vyresene?

Jinak stale plati co jsem psal predtim:

1) Memory manager nemusi okamzite uvolnit pamet OS (kontrola realneho vyuziti pameti pomoci Task Manageru muze byt matouci)
2) Kolekce hodnot parametru zustava po spusteni prikazu v objektu FireDAC zachovana (s urcitou konfiguraci, celkem i verim ze nektery z parametru konfigurace dokaze toto chovani ovlivnit; nejde ovsem o memory leak, ale umysl kvuli perzistenci)

Ani na jedno z toho mi nevyhovuje vzhledem k puvodnimu dotazu odpoved typu "sezen si madExcept ci EurekaLog"... Psal jsi o necem jinem, a Tve pokusy mi prijdou jako stredoveka alchymie spis nez skutecne programovani. K nalezeni memory leaku Ti prece staci memory manager, ne nakup madExcept ani EurekaLog (byt jsou btw. lepsi investici nez nejake TMS cingrlatka). Skoda tady vubec neco psat... :-X
« Poslední změna: 11-07-2019, 22:17:10 od Delfin »
I'm a soldier, so don't panic! I know the underground! I like the WTFPL license! No more Google, go duck, go!