是性能可以忽略數據集字段的?訪問性能使用場名稱,而不是指標
例如,
myQuery.FieldbyName("MyField").AsString;
myQuery.Fields[0].AsString;
案例: 表字段的體面的號碼,說> 50場
訪問大結果集,說> 100,000行
是可讀性好處值得性能下降的字段名稱?
是性能可以忽略數據集字段的?訪問性能使用場名稱,而不是指標
例如,
myQuery.FieldbyName("MyField").AsString;
myQuery.Fields[0].AsString;
案例: 表字段的體面的號碼,說> 50場
訪問大結果集,說> 100,000行
是可讀性好處值得性能下降的字段名稱?
這裏有一個有趣的帖子弗朗索瓦·蓋拉德約FieldByName performance issues。
性能可能不可以忽略不計,這取決於你的名字多久訪問該字段。如果您將其用於每個區域和每一行,您可能會注意到性能下降(請參閱http://www.delphifeeds.com/go/s/74559)。要十個分量可讀性又提高性能,你可以:
此外,AsXXXXX調用可能比使用TField後代本地Value屬性更慢。
你確定'.Value'比'.As [Type]'快嗎? IIRC,'.Value'是一個變體類型屬性,而'.As [Type]'是一個更有效的類型特定屬性。 '.Value'更方便。 – 2011-04-27 07:44:40
順便說一句:「持久字段」是您正在尋找的術語... ;-) – 2011-04-27 07:46:46
['Fieldname']語法不返回字段,但字段的值,因此它不能用於存儲對字段的引用。 – dummzeuch 2011-04-27 08:06:58
我發現FieldByName是明顯慢。
我通常通過中間層訪問數據庫,從次相同的表很多訪問整個記錄。在創建該層時,我將每個字段的索引分配給一個變量。然後我使用這些變量進行以後訪問,仍然有可讀的代碼。
ADODataSet.CommandText := 'select * from [TABLE] where 1 = 0'; //table layout
ADODataSet.Open;
ADODataSet.GetFieldNames(List);
varMyField := List.IndexOf('MyField');
在這種情況下,將引用存儲到TField對象而不是索引可能會更快。 – dummzeuch 2011-04-27 08:08:02
我希望能有像在Delphi的IDE(類似的FxCop)低效代碼的代碼風格檢查工具... – mjn 2011-04-27 11:00:33
有CodeHealer,但我從來沒有使用過它:HTTP://www.socksoftware .com/codehealer.php – 2011-04-27 14:43:37