[英]FireDac ApplyUpdates Bug on FDTable with CachedUpdate
[英]FireDac FDTable Delay Open/Fetch records
出於某種原因,我需要在 Delphi 項目中使用 FDTable 來獲取大量記錄(Interbase 數據庫),不幸的是,打開 FDTable 需要花費太多時間(長達 2 分鍾,有時甚至更多),更糟糕的是,當應用更新時,我通過更改獲取選項嘗試了一切可能:Recsmax、Rowsize、Mode 等,如某些頁面上所述,例如: https://docwiki.embarcadero.com/RADStudio/Sydney/en/Fetching_Rows_(FireDAC)
將 RecsMax 選項設置為一個較小的值(50 或 100)對性能有很大幫助,但即使使用 FetchAll,它也不會在應用過濾器的情況下獲取 1 條記錄。 正如我在需要使用 FDtable 執行此操作之前提到的,FDQuery 不是一個選項,因為我們都知道處理查詢更好。
是否有平滑打開和獲取數據(100k+ 條記錄)的建議? 可以使用Filter + RecsMax 獲取記錄嗎?
查詢表必須有主鍵。 您可以按如下方式配置 TFDTable
FDTable1.FetchOptions.Items := [fiMeta]; // at least
FDTable1.FetchOptions.Unidirectional := False;
FDTable1.FetchOptions.CursorKind := ckAutomatic; // or ckDynamic
FDTable1.CachedUpdates := False;
// LiveWindowParanoic
// When it is false there are problems with Locate and Recno
FDTable1.FetchOptions.LiveWindowParanoic := False // Play with True/False.
這是最佳性能的配置
FDTable 組件主要用於 BDE 兼容性。
帶有“select * from Table1”的 FDQuery 與使用 FDTable 完全相同,但您可以在服務器端過濾結果集。
100k+ 條記錄是要傳輸的大量數據,blob 會增加額外的開銷,因為它們通常是單獨獲取的。 我建議你重新考慮功能設計。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.