Autor Téma: Extrémne pomalé načítanie záznamov do TMSFMXGrid cez LiveBindings  (Přečteno 2978 krát)

Offline cervenka44

  • Příspěvků: 2
  • Karma: 0
Dobrý deň,

Potreboval by som poradiť s nasledujúcim problémom. Nikde som totiž nenašiel riešenie.
K zakúpenému Delphi XE3 som dostal ako bonus komponentu TMSFMXGrid ktorá funguje iba pod FMX s LiveBindings.
Mám vytvorenú databázu malého informačného systému na db PostgreSQL.
Na pripojenie k databáze používam komponenty FireDAC.

V FMX aplikácii mi to funguje takto:
Pripájam sa cez komponenty ADConnection, ADTable, BindSourceDB na TMSFMXGrid.
Načítanie 18700 riadkov so 41 stĺpcami trvá približne 10 minút , čo je prakticky nepoužiteľné.
Maximálna dĺžka riadka je iba 270 znakov.

Vo VCL aplkácii sa to správa rovnako za predpokladu že použijem namiesto TMSFMXGrid StringGrid.
Takže TMSFMXGrid asi nie je problém.

Ak ale vo VCL použijem kombináciu komponentov ADConnection, ADTable, DataSource a DBGrid, načítanie dát je okamžité - menej ako 1 sekunda. Pritom sa pripájam na tú istú tabuľku

Popis takéhoto problému som našiel na http://stackoverflow.com/questions/8574326/firemonkey-and-livebindings-performance-with-databases avšak žiadne zmysluplné riešenie.

Potrebujem bežne pracovať s viac ako 100 000 riadkami a vlastnosti TMSFMXGrid mi úplne vyhovujú.

Vedel by niekto poradiť ako sa vysporiadať s týmto problémom ?


Ďakujem





Offline zdenek

  • Plnoletý
  • ***
  • Příspěvků: 120
  • Karma: 8
Tms grid není zrovna rychlý, taky by chtěl zrychlit, ale tohle je problém livebindings.

Mě to nepřekvapilo, protože livebinding považuji za úplný úlet. Především pro práci s DB. Na rozdíl od TDataSource a spol. Datasource předává data přes hodnoty, zatímco livebindings všechno (dle mého názoru) parsuje jako výrazy, protože lze kamkoliv napsat vzorec. Navíc to ve výsledku skončí jako text. On neprůhlednosti refresh hodnot mezi komponentami ani nemluvě.

Pro profi aplikace na PC naprosto nepoužitelné. Na mobilních zařízení se snažíme vyhnout takovému stavu postupným filtrováním.

Moc jsem Vám asi nepomohl.
« Poslední změna: 05-12-2013, 15:09:30 od zdenek »

Offline mjseven

  • Mladík
  • **
  • Příspěvků: 63
  • Karma: 5
    • Verze Delphi: D7, D2006, XE2, Lazarus
Je opravdu nutné tahat tolik záznamů najednou? V reálu vidí uživatel na monitoru jen desítky řádků.
Data která se z DB čtou jsou z jedné tabulky nebo jde o data z více tabulek?

Offline Mi.Chal.

  • Guru
  • *****
  • Příspěvků: 566
  • Karma: 23
Ak ale vo VCL použijem kombináciu komponentov ADConnection, ADTable, DataSource a DBGrid, načítanie dát je okamžité - menej ako 1 sekunda. Pritom sa pripájam na tú istú tabuľku

Záleží na implementaci, ty standardní datasety to mohou načítat kurzorem postupně, takže se z db nemusí přenést všechno a data se dotahují jak se posouváš. Pokud něco čeká na načtení všeho, tak to bude pomalejší.

Jak už tu ale psali, normální je data filtrovat a načítat jenom to, co opravdu zobrazíš. Je blbost načítat desetitisíce řádků, když se jich na monitor vejde pár desítek. Až člověk dojede na konec seznamu, tak můžeš dotáhnout další část. Třeba v gmailu mám několik desítek tisíc mailů, kdyby se to mělo všechno zobrazit najednou, tak to bude načítat taky několik minut místo pár vteřin.

Offline cervenka44

  • Příspěvků: 2
  • Karma: 0
Predovšetkým ďakujem za reakcie.

Ak je to teda realita čo tvrdí Zdenek, som z toho "trochu" sklamaný.

Naozaj nie je nutné vždy ťahať velké množstvo záznamov, ale aj načítanie 1000 riadkov v tomto prípade trvá okolo 40 sekúnd. Zo skúsenosti v našej firme viem že ak naši používatelia majú čakať na načítavanie dát čo len 30-40 sekúnd, sú z toho nervózni. A takých situáciíí napr. pri generovaní záznamov pre výrobu majú denne aj 20-30.

Na porovnanie by som chcel uviesť, že mám vytvorenú aplikáciu vo VFP 9 ktorou sa pripájam na podnikový informačný systém bežiaci na INFORMIXe. Ťahám z nej cez ODBC napr. dáta poskladané z 5 tabuliek ktorých výsledkom je sada 260 000 záznamov (účtovné transakcie za celý 1 rok) s 23 stĺpcami a to všetko za 25 sekúnd. Je mi jasné, že pokiaľ sa jedna časť údajov zobrazuje, ďalšia sa ešte načítava. Ale v tomto prípade sa viem dostať na koniec sady dát alebo na hociktorý záznam v gride okamžite. Filtrovanie údajov napr. účet alebo obdobie potom riešim samostanou procedúrou cez pravé tlačidlo myši na hociktorom stĺpci ktorý potrebujem filtrovať a nemusím neustále ťahať záznamy zo servera ak chcem požiť aj rôzne kombinácie filtrovaných údajov . Všetko to beží veľmi rýchlo, takže sa ani nejako nezaoberám počtom ťahaných záznamov, samozrejme ale na prvotné filtrovanie používam zmysluplný výber.

Hlavný problém v mojom prípade je ale ten, že keď spustím načítanie tých 18700 záznamov (čo myslím nie je až tak veľký objem) celá aplikácia sa na 10 minút zasekne a začne reagovať až po načítaní všetkých riadkov. Neviem ovplyvniť že pokiaľ sa 1 časť dát zobrazuje a ďalšie dáta sa načítavajú aby aplikácia normálne fungovala. Je to takto naozaj nepoužiteľné.

Obmedzil som na skúšku v TMS Grid pod LiveBindigs vlastnosť BufferCount=1000. Takto bola aplikácia zaseknutá asi 40 sekúnd. Je to časovo porovnateľné k tým 18700 záznamom. Nič to nerieši.
Skúsil som ešte načítať do TMS Grid XLS  súbor o 31 000 riadkoch a 28 stĺpcoch (každý záznam 280 znakov). Načítanie prebehlo za 6 sekúnd. Celkom slušné, aj keď mi práve toto nepomôže.
Takže predsa asi to má na svedomí LiveBindings. Tiež som mal taký prvotný pocit, ale nemal som s tým žiadnu skúsenosť.

Pokiaľ by predsa len existovalo nejaké riešenie, privítam každú užitočnú radu.




Offline chaloup

  • Mladík
  • **
  • Příspěvků: 74
  • Karma: 9
    • Verze Delphi: Delphi 10.1
Pro XE5 je teď ke stažení InfoPower FireMonkey http://cc.embarcadero.com/item/29712 tam je fmx grid, který umí napojení přes datasource(není třeba používat livebindings) a potom se chová jako klasický vclgrid - načte +-to co je na obrazovce a zbytek podle potřeby...
Jinak na fórech se o tom problému s livebindings+grid bavili, dokonce to někdo "konzultoval" s emb a ti mu odpověděli že má "bad application design"  :) ...

 

S rychlou odpovědí můžete používat BB kódy a emotikony jako v běžném okně pro odpověď, ale daleko rychleji.

Upozornění: do tohoto tématu bylo naposledy přispěno před 120 dny.
Zvažte prosím založení nového tématu.

Jméno: E-mail:
Ověření:
Kolik je šest plus čtyři (slovem):