Forum Delphi.cz
Delphi => FireDAC => Téma založeno: ShaneZB 14-10-2020, 09:16:44
-
Zdar všem.
Pracujeme na opuštění BDE a to přechodem na FireDAC. Používáme databázi FireBird. Při testování nás nemile překvapilo rapidní zpomalení načtení dat oproti BDE. Možná je hlavní problém v tom, že se používá třída TTable (TFDTable) – ale vzhledem k situaci není možné se tomu vyhnout. Zkoušíme různé rady z internetu, ale nic nezabírá.
Moje osobní domněnka je, že bez ohledu na nastavení, že se RecordCount má zjišťovat podle počtu stažených dat, zjišťuje se vždy kompletní počet – nebo něco nastavuju špatně – protože „FireDAC Monitor“ vypisuje dotaz na COUNT vždy. BDE zjišťuje RecordCount až když je třeba.
Je nějaká možnost, aby TFDTable nedělal dotaz na počet záznamů ihned po Open, ale dalo se to zjistit až na vyžádání?
Nebo - existuje nějaký jiný spolehlivý postup/nastavení pro dosažení rychlého otevření tabulky?
-
Pouzivas FetchOptions.Mode := fmAll ?
Jaky je v case rozdil mezi otevrenim v TFDTable a TFDQuery?
Proc presne potrebujes TFDTable? i nad TFDQuery muzes delat updaty pres Edit a spol, jen musi byt jasny index, a jiny duvod mne nenapada.
-
Pouzivas FetchOptions.Mode := fmAll ?
Mám tohle nastavení:
FetchOptions.Mode := fmOnDemand;
FetchOptions.RowsetSize := 20;
FetchOptions.RecordCountMode := cmFetched;
Jaky je v case rozdil mezi otevrenim v TFDTable a TFDQuery?
Záleží na velikosti tabulky - čím větší tím vetší je rozdíl - třeba i poloviční. Ale mě víc trápí rozdíl rychlosti TTable <> TFDTable.
Proc presne potrebujes TFDTable? i nad TFDQuery muzes delat updaty pres Edit a spol, jen musi byt jasny index, a jiny duvod mne nenapada.
Projekt, který překlápím je opravdu velký moloch a TTable je moc hluboko ve střevech. Používá se FindKey; GotoNerest a pod ...
-
tak zkus FetchOptions.Mode := fmAll, to je zhruba to co dela BDE
FetchOptions.RowsetSize := jsem exprimentoval;
FetchOptions.RecordCountMode := nemenil jsem ;
-
tak zkus FetchOptions.Mode := fmAll, to je zhruba to co dela BDE
To je ještě pomalejší, protože stahuje vždycky všechny záznamy v tabulce.
-
Priznam se, ze jsem s TFDTable nikdy nic moc nedalal, ale prislo mi ze se snazi vzdy stahnout vsechny data, nebo aspon ziskat jejich celkovy pocet, treba pro nastaveni scrollbaru v gridu atd. Proto jsem rikal ze ze me zkusenosti s FDQuery je vyhodnejsi pouzit fmAll s velkym RowSize nez fmDemand, protoze mi merenim prislo rychlejsi stahnout vse po velkych davkach, nez fmDemand postupne, hlavne protoze treba pri razeni na klientu se stejne stahlo vse, ale rozkouskovane.
Vic ti tedy neporadim, snad jen ze FireDac pri mereni byl fakt rychly treba proti ADO.
-
Muzu se zeptat zda jsi na neco přišel? Pro budoucnost...
-
Takže, jak jsem to vyřešil? TFDTable nepoužívat na zobrazení celé tabulky. Když už je, z nějakého důvodu, nutné ji použít, tak vždy vhodně odfiltrovanou.
Jsou různé režimy chování - ale buď trvá dlouho otevření nebo to je pomalý posun po záznamech nebo je oboje rychlé, ale pak nejde používat řazení podle indexu.