Forum Delphi.cz

Delphi => FireDAC => Téma založeno: miroB 09-07-2019, 12:17:46

Název: Array DML (FireDAC) ->Zostáva neuvoľnená pamäť
Přispěvatel: miroB 09-07-2019, 12:17:46
Robím prenos dát z Excelu do SQLite:
Nedá sa spraviť nejaký FLUSH, či niečo podobné?
Využité Array DML. (Params.BindMode = pbByNumber)
Viď http://docwiki.embarcadero.com/RADStudio/Rio/en/Array_DML_(FireDAC) (http://docwiki.embarcadero.com/RADStudio/Rio/en/Array_DML_(FireDAC))
Název: Re:Array DML (FireDAC) ->Zostáva neuvoľnená pamäť
Přispěvatel: Stanislav Hruška 09-07-2019, 12:39:33
Ten DataSet si preveril?
Název: Re:Array DML (FireDAC) ->Zostáva neuvoľnená pamäť
Přispěvatel: miroB 09-07-2019, 13:21:15
DataSet sám o sebe nepomohol. Ten som odstavil už pri začiatku skúmania.
Keby som riešil StringGrid, je jasné, že ten by spotreboval veľkú pamäť.
Ale mám dbGrid, ktorý načítava nové riadky až na požiadanie.
Mám dve FDQuery:
Upresňujem výsledok pokusu:
Stačilo killnúť, len druhé query (INSERT INTO) a pamäť bola vrátená systému.
Aby nevzniklo podozrenie, naplnenie DML Array prebieha v cykle, poctivo striehnem ArraySize, potom spúšťam Exec. Transakcie dávam 1:1 s exec.
V prípade, že program vypadne s neukončenou transakciou, z cyklu, tak korektne s adekvátnou veľkosťou spustím Exec a na záver Commitnem.
Název: Re:Array DML (FireDAC) ->Zostáva neuvoľnená pamäť
Přispěvatel: miroB 09-07-2019, 15:36:35
Název: Re:Array DML (FireDAC) ->Zostáva neuvoľnená pamäť
Přispěvatel: pf1957 09-07-2019, 16:42:36
  • Pre pamäť používam PeakWorkingSetSize & spol. Výpis do podrobného logu. Pred a za každou zaujímavou funkciou.. V zásade veľmi dobre korešponduje s Task Managerom keď krokujem.
Vypisuj si obsah stavu pameti aplikace, jak pise Delphin: http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/System__TMemoryManagerState.html (http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/System__TMemoryManagerState.html)
Název: Re:Array DML (FireDAC) ->Zostáva neuvoľnená pamäť
Přispěvatel: miroB 09-07-2019, 19:01:29
Pracuj s memory managerem, ne s operacnim systemem. Memory manager si totiz muze ponechat nektere bloky pameti pro budouci pouziti (oznaci si je za volne, ale OS je nevrati).
Ak som použil _PROCESS_MEMORY_COUNTERS štruktúru pre zisťovanie pamäti, tak to teda nebolo v poriadku? (PeakWorkingSetSize, WorkingSetSize, GetCurrentSetSize )
Na obr. prikladám malý výber z cca 30-50 záznamov logu.

Inak ma napadlo, že keď zrovna len Query "INSERT INTO" prerobím na čiste Runtime, na záver výpočtu ho logicky uvoľním. A bude vymaľované.
Ak mi také chovanie nezahlási chybu, zjavne uvoľní pamäť aj pre Task Manager, všetky údaje budú v SQLite, tak som asi spokojný.
Alebo mám skôr očakávať skrytú zradu?

Bez prerušenia programu som schopný preniesť v sérii všetky hárky Excelu a aj viaceré ďalšie celé xlsx súbory.

Pozerám aj na radu PF1957. GetMemoryManagerState. Našiel som v kompe aj nejaké vzory.
Lenže už sa mi do toho moc nechce. Som prepracovaný. Potrebujem produkovať ďalšie výsledky.
Ale keď sa ukáže, že je to treba, tak sa ešte dozadu premôžem.
Název: Re:Array DML (FireDAC) ->Zostáva neuvoľnená pamäť
Přispěvatel: miroB 09-07-2019, 19:44:01
..
P.S. pro TFDBatchMove si muzes napsat vlastni vstupni ci vystupni objekt (on ma uz ted tusim parser CSV v zakladni vybave).
OK, vidím:
https://stackoverflow.com/questions/33045414/firedac-how-to-set-up-tfdbatchmove-with-data-set-reader-writer (https://stackoverflow.com/questions/33045414/firedac-how-to-set-up-tfdbatchmove-with-data-set-reader-writer)
a
http://docwiki.embarcadero.com/CodeExamples/Seattle/en/FireDAC.TFDBatchMove_Sample (http://docwiki.embarcadero.com/CodeExamples/Seattle/en/FireDAC.TFDBatchMove_Sample)
Bude však lepšie, keď zachovám "neštandardné" riešenie.
Dôvod je bližšie vysvetlený tu: https://forum.delphi.cz/index.php/topic,16290.0.html (https://forum.delphi.cz/index.php/topic,16290.0.html)
V skratke: Nechcem byť "vyrušovaný" kontrolou typu údajov. V prípade DataSet sa tomu zrejme nevyhnem..
SQLite som nevedel prísť na chuť, pre zásadný problém s typom dát. Bolo tu už k téme napísané hodne. Je fakt, že FireDAC pre SQLite, tú voľnosť datových typov "drôtuje". Bráni jej, ale našťastie nie celkom. To využívam v privátnom riešení, pri Array DML.
No a užívateľ, ktorý sa prispôsobí SQLite filozofii, má potom nekonečné možnosti experimentovania.
Aj v oblasi písania SQL-ov.
Príklad využitia:
Sú firmy, ktoré potrebujú poznať nielen číselné hodnoty stĺpca, ale aj prípadné chybové hodnoty.
Jediná mne známa relačná databáza, ktorá zvládne v stĺpci čísla a aj chybové kódy, bez nutnosti dvoch samostatných stĺpcov je práve SQLite.
Výsledok je pôsobivý. Ak pracujete s číslami, chybové hodnoty sa tvária ako 0 (Nula).
Akonáhle použijete cca toto:
SELECT mojeCislo AS [mojeCislo::Text(12)] FROM XY
máte zobrazený zoznam chýb.
Prípadne možné doplniť obmedzením, cca takto:
WHERE NOT IsNumber( mojeCislo ) -- nie je presne odskusane. Verim že sa da
Název: Re:Array DML (FireDAC) ->Zostáva neuvoľnená pamäť
Přispěvatel: Stanislav Hruška 09-07-2019, 19:58:28
Citace
Bez prerušenia programu som schopný preniesť v sérii všetky hárky Excelu a aj viaceré ďalšie celé xlsx súbory.
Ale ako som z Tvojho textu pochopil, tak pri prvej chybe pri Commit proces ukončíš a uložíš len čo prebehlo predtým. Z môjho pohľadu to je veľmi zle. Ja by som niečo také nikdy neurobil. Ak som to dobre pochopil, tak máš dve možnosti:
Název: Re:Array DML (FireDAC) ->Zostáva neuvoľnená pamäť
Přispěvatel: Stanislav Hruška 09-07-2019, 20:00:26
V tvojom odkaze boli uvedené príklady na ošetrenie chýb. Ale nie na Tvoj prípad. Ten zaujíma aj mňa.
Název: Re:Array DML (FireDAC) ->Zostáva neuvoľnená pamäť
Přispěvatel: Stanislav Hruška 09-07-2019, 20:13:49
Ešte poznámočka. Ak budeš mať ArraySize = 1000 a v dávke mu pošleš len 500 príkazov, tak sa nič nedeje.
Název: Re:Array DML (FireDAC) ->Zostáva neuvoľnená pamäť
Přispěvatel: miroB 09-07-2019, 20:20:37
V tvojom odkaze boli uvedené príklady na ošetrenie chýb. Ale nie na Tvoj prípad. Ten zaujíma aj mňa.
U mňa je to filozoficky jednoduché. Zatiaľ.
Nie je problém, že vznikne polotovar pri ukladaní.
Podstatné je, či celkove prebehne bez akejkoľvek chybovej hlášky. Prípadne skontroľujem ešte navyše aj počet riadkov na oboch stranách. Inak ho neaxceptujem.
Prenášam teraz tabuľku 1:1. NEROBÍM APPEND.
Ale ak by som sa zo širšieho hľadiska zamyslel a ten append išiel dorobiť, tak stále zostanem u tabuľky. Bude trebars temp, alebo InMemory ( obe SQLite umožňuje).
Alebo aj tretia možnosť, keď by som si nechcel "zašpiniť" hlavnú databázu, môžem vytvoriť samostatný dočasný SQLite súbor. Ten následne linknúť na hlavnú databázu.
Po kontrole, že prenos tabuľky prebehol komplet, (viď vyššie), príde krok 2.
V ňom sa už vysporiadam s appendom do cieľovej tabuľky prostriedkami databázy.
Název: Re:Array DML (FireDAC) ->Zostáva neuvoľnená pamäť
Přispěvatel: miroB 09-07-2019, 20:26:54
Ešte poznámočka. Ak budeš mať ArraySize = 1000 a v dávke mu pošleš len 500 príkazov, tak sa nič nedeje.
Nevadí. Mám to aj kvôli kontrole. Aj tak počítam inserty. Aby som vedel, či je požiadavka=0, alebo je viac ako 0.
Druhou kontrolou je aj otvorená transakcia. Takže ide o duplikovanú kontrolu.
Vzhľadom na to, že tabuľky budú spravidla asi 1000 krát menšie, ba ešte menšie.. mám určitú výkonovú rezervu.. Teoreticky sa prenos z 90% vykoná v rozmedzí 0.1 - 1.0 sekundy. Vrátane analýzy typov, konverzií, rozbaľovania a podobne.
Preto si môžem dovoliť určitý luxus v kontrole:)
Název: Re:Array DML (FireDAC) ->Zostáva neuvoľnená pamäť
Přispěvatel: Stanislav Hruška 09-07-2019, 20:28:57
Tebe príkaz Query.Transaction.Rollback nedá DB do pôvodného stavu?
V Tvojom popise som nepochopil jednu vec. Ideš riadok po riadku a zakaždým urobíš Commit. Ak máš výnimku ukončíš to. Ak nie, tak to dokončíš a urobíš Exec. To mi hlava neberie. Z môjho pohľadu to je duplicitné uloženie údajov.
Název: Re:Array DML (FireDAC) ->Zostáva neuvoľnená pamäť
Přispěvatel: miroB 09-07-2019, 20:33:59
Tebe príkaz Query.Transaction.Rollback nedá DB do pôvodného stavu?
V Tvojom popise som nepochopil jednu vec. Ideš riadok po riadku a zakaždým urobíš Commit. Ak máš výnimku ukončíš to. Ak nie, tak to dokončíš a urobíš Exec. To mi hlava neberie. Z môjho pohľadu to je duplicitné uloženie údajov.
Pozri sem:
http://docwiki.embarcadero.com/RADStudio/Rio/en/Array_DML_(FireDAC) (http://docwiki.embarcadero.com/RADStudio/Rio/en/Array_DML_(FireDAC))
Example 1.
Mám ArraySize nastavený na 10 000. Takže pred EXEC prebehne 10 000 INSERT INTO príkazov.
V každom cykle len reagujem na stav, či treba iba zápis (insert into), alebo k nemu aj Exec a Commit.
Po exec robím Commit. ( Presne až po tých desiatich t. ) Po commit nastavím Begin Transaction..
Cyklus pokračuje.
Až po ukončení cyklu ešte kontrolujem, či niečo nezostalo na Commit-nutie.
Resp. či nie je otvorená transakcia.
Asi tak: Skáčem po 10t. Ale tabuľka nemá čistý násobok 10t (spravidla nikdy), tak zostanú nejaké drobné na záver.
Název: Re:Array DML (FireDAC) ->Zostáva neuvoľnená pamäť
Přispěvatel: Stanislav Hruška 09-07-2019, 21:01:58
Citace
V každom cykle len reagujem na stav, či treba iba zápis (insert into), alebo k nemu aj Exec a Commit.
Predpokladám, že kontroluješ nejaké podmienky na základe ktorých sa rozhodneš. Tak mi to je jasnejšie. Len mi to trocha nesedí. Možno si sa iba zle vyjadril.
V mojom poňatí by to bolo takto. "V každom cykle len reagujem na stav, či treba iba zápis. Ak áno, tak urobím InsertInto a na konci cyklu Exec a Commit."
No nechajme to už tak. Ako Ťa poznám, tak to máš poriadne premyslené a vyskúšané ;)
Název: Re:Array DML (FireDAC) ->Zostáva neuvoľnená pamäť
Přispěvatel: Stanislav Hruška 09-07-2019, 21:09:57
Ja som mal na mysli len to spracovanie záznamov, nie predmet diskusie.
Název: Re:Array DML (FireDAC) ->Zostáva neuvoľnená pamäť
Přispěvatel: miroB 09-07-2019, 21:33:12
Ja verim vic FireDAC nez Mirovi ;D Myslim si, ze kdyby v prenosu byl memory leak, nekdo by na nej uz upozornil. ..
Aj ja mám rád FireDAC. Netvrdím, že je zlý. Naopak. Ale pamätáš sa snáď, že sme mu museli v nejakých prípadoch pomôcť. Niekde to tu bude zachytené.
Táto otázka začala, že či neexistuje po Array DML nejaký flush. Teraz síce nemám priamu odpoveď, len viem, že keď je query preč, pamäť je zjavne a s istotou voľná. Zatiaľ to stačí.
Myslím aj Radek písal, že si Query a spol vytvára v runtime. Nič zvláštne teda nespravím.
Název: Re:Array DML (FireDAC) ->Zostáva neuvoľnená pamäť
Přispěvatel: miroB 09-07-2019, 21:37:50
.. a na konci cyklu Exec a Commit..
Nie. Exec a Commit už v cykle. Vždy keď sa naplní 10t riadkov.
No a po cykle tiež, len už tam bude zrejme riadkov menej než 10t.
Pretože tabuľka má v danom prípade cca 500t riadkov, tak v cykle je to dosť veľa krát, čo musí prísť Exec.
A po cykle ešte jeden Exec na záver.
Název: Re:Array DML (FireDAC) ->Zostáva neuvoľnená pamäť
Přispěvatel: Stanislav Hruška 10-07-2019, 07:54:18
Nerozumiem prečo píšeš o dvoch cykloch, keď na to určite stačí jeden.
Název: Re:Array DML (FireDAC) ->Zostáva neuvoľnená pamäť
Přispěvatel: miroB 10-07-2019, 10:22:11
Nerozumiem prečo píšeš o dvoch cykloch, keď na to určite stačí jeden.
Nepíšem o počte cyklov. Cyklus je jeden. Ale sú dve miesta, kde robím Exec a Commit. Ak je to vnútri v cykle, tak za tým ešte aj StartTransaction.

Sú dve základné kombinácie:
Název: Re:Array DML (FireDAC) ->Zostáva neuvoľnená pamäť
Přispěvatel: miroB 10-07-2019, 10:36:50
..TLDR ::) DML Array je velmi efektivni zpusob prenosu dat a FireDAC jej ma (nebo alespon mel) resen korektne, takze bych v tomto pripade hledal spis chybu na strane programatora nez FireDAC. Mozna se vsak pletu a FireDAC obsahuje memory leak. Pro analyzu vsak potrebuji MCVE..
Ani mne to nedá. Po ránu s občerstveným elánom, sa pokúšam program učesať.
Okrem iného som zamenil Query za Command. Zdá sa, že sa znížilo rezíduum cca o 40%.
Ale prekopávam aj svoju štruktúru. Aby som poctivo a v pravý čas likvidoval všetky Pointre, Tarray<> a TDictionary. Podľa toho, ako dopadnem, by som následne zvážil aj to MCVE
Název: Re:Array DML (FireDAC) ->Zostáva neuvoľnená pamäť
Přispěvatel: miroB 10-07-2019, 15:13:48
Táto otázka začala, že či neexistuje po Array DML nejaký flush. Teraz síce nemám priamu odpoveď, len viem, že keď je query preč, pamäť je zjavne a s istotou voľná.

Muzes uvolnit hodnoty DML pole napr. nastavenim ArraySize. To je vec, kterou pro Tebe FireDAC neudela (resp. udela tusim s odpripravenim prikazu; pisu z hlavy). Primo po spusteni vsak zustavaji hodnoty parametru v kolekci.

Napada me ze by to nakonec mohlo byt i pointou dotazu... Nejde vsak o memory leak. Jde jen o krok jenz si musi programator zaridit sam.
Už mám MVCE. Správa sa to presne.. Na .. (škaredý výraz nedopíšem, aj keď som s tým stratil hafo času)
Nepomôže
Kód: Delphi [Vybrat]
  1.   FD_cmd.Params.ArraySize := 1; // NEPOMOZE
  2.   FD_cmd.Params.Clear; // NEPOMOZE
Hmm nepomôže dokonca nič?

Projekt vytvorí *.db3, a naplní na veľkosť 123 MB. Tam kde je exe.
Tabuľka sa zobrazí po vygenerovaní dát. Je tam aj pokus o vyčistenie. Ale to nefunguje.
Myslím, že mi zostáva visieť na 25 MB, bez ohľadu na to, či sú výsledné data 123 MB, alebo cca 40 MB
Naďalej robím len s Task Managerom. Nemám čas na iné. Ale princíp je jasný.

Spravil som si medzitým verziu 2: Všetky data som strčil do dataModule.
Tu pomôže jediné na záver: DataModule1.Free A pamäť je okamžite k dispozícii.
Název: Re:Array DML (FireDAC) ->Zostáva neuvoľnená pamäť
Přispěvatel: miroB 10-07-2019, 15:44:01
..Ja verim vic FireDAC nez Mirovi ;D
No tak ja ti teraz nejak neviem.. Možno by si mi mohol začať veriť:)
..Tak ci tak, mereni pameti pomoci OS neni spravne..
Hmm, no vysvetli užívateľovi, ktorý nič iné nevie, než TM.
Keď som použil TFDQuery, zostávalo visieť cez 50 mega. Veru nijak málo.
Začal by som autora programu podozrievať, že asi nemá vo svojom diele poriadok. (myslím svoj program, nie FireDAC)
Tomu som sa chcel určite vyhnúť.

Zdá sa, že pre FDCommand, je kus menšia spotreba pamäti. (aspoň tej, čo sa opticky neuvoľní)

Inak súkromne povedané, memory Leak to nebude. Pretože som schopný napriek tomu otvárať a čítať ďalšie a ďalšie Excel súbory, bez zavretia programu.
Ak by šlo o memory leak, určite by som časom zamrzol.
Název: Re:Array DML (FireDAC) ->Zostáva neuvoľnená pamäť
Přispěvatel: miroB 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..
Název: Re:Array DML (FireDAC) ->Zostáva neuvoľnená pamäť
Přispěvatel: miroB 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ä:Upresnenie: Vyskúšal som vzorové chyby z Radkovho článku:
https://delphi.cz/post/Detekce-problemu-za-pomoci-FastMM4.aspx (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.
Název: Re:Array DML (FireDAC) ->Zostáva neuvoľnená pamäť
Přispěvatel: Stanislav Hruška 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.
Název: Re:Array DML (FireDAC) ->Zostáva neuvoľnená pamäť
Přispěvatel: miroB 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ť.
Název: Re:Array DML (FireDAC) ->Zostáva neuvoľnená pamäť
Přispěvatel: miroB 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?
Název: Re:Array DML (FireDAC) ->Zostáva neuvoľnená pamäť
Přispěvatel: miroB 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í.
Název: Re:Array DML (FireDAC) ->Zostáva neuvoľnená pamäť
Přispěvatel: pf1957 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?
Název: Re:Array DML (FireDAC) ->Zostáva neuvoľnená pamäť
Přispěvatel: pf1957 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.
Název: Re:Array DML (FireDAC) ->Zostáva neuvoľnená pamäť
Přispěvatel: vandrovnik 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.
Název: Re:Array DML (FireDAC) ->Zostáva neuvoľnená pamäť
Přispěvatel: miroB 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.
Název: Re:Array DML (FireDAC) ->Zostáva neuvoľnená pamäť
Přispěvatel: miroB 11-07-2019, 22:21:40
Za mňa vyriešené
Název: Re:Array DML (FireDAC) ->Zostáva neuvoľnená pamäť
Přispěvatel: miroB 11-07-2019, 23:02:30
Na dôchodku, si musím vystačiť s Delphi.
Tak sa to zbehlo, niekedy tuším od roku 91. Mám disketu s Pre-Release.
Dnes by to už nebola voľba. Ale:

Vieš čo predviedol MS s Windows CE? To čo vypúšťali bolo na kriminál.. Nehotové veci.
Nebolo to jediné. S mnohými vecami skrachovali. Veľmi veľa išlo priamo do slepej uličky. A tisícky programátorov si to odskákali.
MS rozhodne nie je historicky iba kladná firma.
Možno máš práve šťastie, že až teraz robíš s C#.

Alebo Java. Encyklopedia Britannica na PC. Neviem už rok. Svokor priniesol.
Kúpený program.
Dnes by takú príšernosť nevypustil ani 12 ročný chlapec. To som rovno hodil do koša.

Nokia kontakty/outlook v Jave. Než sa to naučili, bolo to peklo.
Na svojom začiatku bola Java iba pre masochistov.

A to som bol vyškolený na Sinclair-e, ktorý 5 minút naťahoval každú blbosť z kazeťaku.
Často pri tom padol. Čím "čínskejší" kazeťak, tým mu lepšie sedel. Bez srandy.

Naprostý súhlas - trochu voľne citujem:
  • Delphi se IMHO melo soustredit vyhradne na nativni Windows (ne na multi-kulti opici),
    nebyli v tom spatni.
  • No a pak ta nestastna cenova politika a
  • celkove rychlost oprav...

PS
XAMARIN, Android OK. Lenže z môjho pohľadu to prišlo príliš neskoro.
Název: Re:Array DML (FireDAC) ->Zostáva neuvoľnená pamäť
Přispěvatel: pf1957 12-07-2019, 07:14:15
Vieš čo predviedol MS s Windows CE? To čo vypúšťali bolo na kriminál.. Nehotové veci.
Nebolo to jediné. S mnohými vecami skrachovali. Veľmi veľa išlo priamo do slepej uličky. A tisícky programátorov si to odskákali.
MS rozhodne nie je historicky iba kladná firma.
Možno máš práve šťastie, že až teraz robíš s C#.
Copak Windows CE, ale videls nekdy Windows verze 1 nebo 2? To se nedalo pouzit vubec k nicemu. Prvni trochu pouzitelna verze byla Windows 3.1 a teprve dvojice NT4 + W95 zacala pripominat OS...

Ale tak to je vzdycky, kdyz se pustis do neceho noveho, co ma detske chyby. Ja si pamatuju, jak jsme z Hong Kongu privezli nejake pre-release .NET, ktere predchazeli masivni marketingove slinty. To se nedalo pomalu ani naistalovat, natoz s tim neco delat. Takze jsme to radu let naprosto ignorovali a vratili se k tomu az nekdy po letech, kdyz uz to byl vyspely system. Ale jako firma, ktera si muze dovolit nove veci zacit v novych technologiich s novymi lidmi, kteri tu technologii osvoji a tvori jadro teamu pro danou rodinu produktu.

Nove technologie, to je zpravidla pro nejake studenty a hracicky, kteri maji cas a elan se tim zabyvat a nikdo od nich v podstate nic neocekava. Ti pak s technologii vyrostou, ale mezitim se objevi dalsi technologie, a to uz zustavaji opodal a roste dalsi generace.

Freelancer nebo mala firma muze zapomenout, ze se necha vlacet nejakymi novymi technologie, protoze se nejak musi zivit.
Název: Re:Array DML (FireDAC) ->Zostáva neuvoľnená pamäť
Přispěvatel: Stanislav Hruška 12-07-2019, 08:57:51
Keď už ste odbočili od témy tak sa trochu pridám aj ja. Mňa osobne štve, a aj som sa na to opýtal, že si nemôžem kúpiť Delphi len pre Win. Nikdy v živote nebudem robiť inú platformu. Veď nezvládam ani ten Win. Odpoveď bola, že sa to ani neplánuje. Ja nemám zvyšných 3500€. Do tých 1000 to ešte išlo.
Na druhú stranu si ale zaslúžia pochvalu za to ako ten mŕtvy vývoj naštartovali a posunuli.
Název: Re:Array DML (FireDAC) ->Zostáva neuvoľnená pamäť
Přispěvatel: vandrovnik 12-07-2019, 22:18:50
Jo, jenze to uz Delphi nebude ;) Vis jak moc je aktualni Delphi vzhledem (co mohu rici) vuci Android nebo Windows API?

Jo jo, potřebuju teď používat Direct2D a pak ho i tisknout. K tomu je potřeba mj. ID2D1DeviceContext. V roce 2013 se jich někdo ptal, zda přidají header file D2d1_1: http://codeverge.com/embarcadero.delphi.graphics/direct2d-new-header-file-d2d1_1-a/1081220 (http://codeverge.com/embarcadero.delphi.graphics/direct2d-new-header-file-d2d1_1-a/1081220) Odpověď od Remy Lebeau (TeamB) byla v tom smyslu, že si to přeci tazatel může přepsat sám. No a po šesti letech, co myslíte? Samozřejmě že to v Delphi pořád ještě není... Takže nejjednodušší bylo vyházet všechny odkazy na Winapi.D2D1 apod. a místo toho použít https://github.com/CMCHTPC/DelphiDX12 (https://github.com/CMCHTPC/DelphiDX12). Další černý puntík :-)
Název: Re:Array DML (FireDAC) ->Zostáva neuvoľnená pamäť
Přispěvatel: pf1957 13-07-2019, 08:07:43
Neposunuli ani nic nenastartovali ??? Co se tyce Windows vim pomerne dost a sleduji kazdou novou verzi SDK, takze ne, Delphi je dost pozadu ::)
Ono to je prirozene: jako outsider a v te konkurenci... Neco jineho to bylo v drevnich dobach DOSu a neco jineho dnes, kdyz napr. v oblasti autentikaci a bezpecnosti sotva nastudujes a dokoncis jednu implementaci, uz ti vyhrozuji, ze ji nahradi jinou  (uz abych byl v duchodu - deska za 30  :) ).
Název: Re:Array DML (FireDAC) ->Zostáva neuvoľnená pamäť
Přispěvatel: Stanislav Hruška 13-07-2019, 08:11:51
Nepamätám si človeka, ktorý by sa tak neskutočne tešil na dôchodok :D
Název: Re:Array DML (FireDAC) ->Zostáva neuvoľnená pamäť
Přispěvatel: pf1957 13-07-2019, 08:37:25
Nepamätám si človeka, ktorý by sa tak neskutočne tešil na dôchodok :D
Jj, vzdyt jdu o 2 roky driv :)

Jako cloveku, ktery od malicka bastlil HW se zdal SW jako zajimava zalezitost. Ale kdybych se mel znovu rozhodovat, tak dneska bych sel smerem molekularni biologie/genetika. Ale kdo vi, co bude za 50 let, ze :)
Název: Re:Array DML (FireDAC) ->Zostáva neuvoľnená pamäť
Přispěvatel: František 16-09-2019, 07:42:29
btw: zaujimalo by ma ako mas porieseny ten rychly parsing XMLka...
a aj to, ako dlhe retazce tam mas...