2014年12月13日 星期六

欄位資料取得的速度

如果要取得G_CUST的檔案中的AR_DLV欄位,用G_CUST.FieldByName('AR_DLV').AsString和G_CUSTAR_DLV.AsString(直接用欄位取值)那一個比較好?
以前筆者都採用G_CUST.FieldByName('AR_DLV').AsString,主要的原因是1.看起來很直覺2.不用抓欄位設定3.如果欄位或來源有更改不用重抓。
不過最近在做程式大量計算時,發現當資料量一多,檔案的欄位在多年功能變動加大的努力上,也成長了不少,結果速度就有點拖下去了。改用第二種方式後,速度明顯的提升了,原因是用欄位取值是直接取,FieldByName則要跑一下迴圈,判斷是AR_DLV欄位後,才給值,所以雖然FieldByName的彈性大,但是速度就被犧牲了。
所以在設計程式時,也許要考量一下這二種不同的方式,依程式特性來做取捨。提供給Delphi同好做參考。