2011-04-27 59 views
7

是性能可以忽略數據集字段的?訪問性能使用場名稱,而不是指標

例如,

myQuery.FieldbyName("MyField").AsString; 
myQuery.Fields[0].AsString; 

案例: 表字段的體面的號碼,說> 50場

訪問大結果集,說> 100,000行

是可讀性好處值得性能下降的字段名稱?

回答

5

這裏有一個有趣的帖子弗朗索瓦·蓋拉德約FieldByName performance issues

+0

我希望能有像在Delphi的IDE(類似的FxCop)低效代碼的代碼風格檢查工具... – mjn 2011-04-27 11:00:33

+0

有CodeHealer,但我從來沒有使用過它:HTTP://www.socksoftware .com/codehealer.php – 2011-04-27 14:43:37

3

性能可能不可以忽略不計,這取決於你的名字多久訪問該字段。如果您將其用於每個區域和每一行,您可能會注意到性能下降(請參閱http://www.delphifeeds.com/go/s/74559)。要十個分量可讀性又提高性能,你可以:

  1. 使用 [「字段名」]或 FieldByName()語法只有一次,並存儲在一個變量的字段的引用。
  2. 使用 「靜態」 持久字段聲明,右鍵單擊該數據集,選擇字段編輯器並添加所需的字段。它將聲明適當的TField後代,並讓您指定一個名稱。

此外,AsXXXXX調用可能比使用TField後代本地Value屬性更慢。

+1

你確定'.Value'比'.As [Type]'快嗎? IIRC,'.Value'是一個變體類型屬性,而'.As [Type]'是一個更有效的類型特定屬性。 '.Value'更方便。 – 2011-04-27 07:44:40

+1

順便說一句:「持久字段」是您正在尋找的術語... ;-) – 2011-04-27 07:46:46

+4

['Fieldname']語法不返回字段,但字段的值,因此它不能用於存儲對字段的引用。 – dummzeuch 2011-04-27 08:06:58

1

我發現FieldByName是明顯慢。

我通常通過中間層訪問數據庫,從次相同的表很多訪問整個記錄。在創建該層時,我將每個字段的索引分配給一個變量。然後我使用這些變量進行以後訪問,仍然有可讀的代碼。

ADODataSet.CommandText := 'select * from [TABLE] where 1 = 0'; //table layout 
ADODataSet.Open; 
ADODataSet.GetFieldNames(List); 
varMyField := List.IndexOf('MyField'); 
+2

在這種情況下,將引用存儲到TField對象而不是索引可能會更快。 – dummzeuch 2011-04-27 08:08:02

相關問題