直接訪問ADO.NET語句運行
這是因為它們強制COM在運行時(而不是在編譯時)解析對Value屬性的引用,每一次對該對象的引用都要求有一系列類似的,ADO.NET語句還進行了重新設(shè)計,從而向開發(fā)人員提供對ADO.NET語句組件的直接訪問。
查詢結(jié)果記錄發(fā)送到客戶端之后,客戶端應(yīng)用程序可能需要相當可觀的時間去處理結(jié)果集。每一種體系(客戶機/服務(wù)器,多層體系中的中間層,以及ASP)都為優(yōu)化這個階段的代碼提供了相應(yīng)的技術(shù)。下面是幾個能夠顯著改善性能的技巧。 #t#
我在代碼中看到最多的錯誤之一是:在引用Recordset Field.Value的時候,使用延遲綁定(Late Binding)。由于代碼需要頻繁地引用Value屬性,而且通常要引用的Field對象有很多,本文前面提到的倍數(shù)因子將起到重要影響——因此,ADO.NET語句所有這里介紹的技巧能夠顯著地改善性能。
一些開發(fā)者使用延遲綁定技術(shù)的原因在于,他們想要明確地標識出SELECT語句選擇了哪些行。為了這個目標,許多人使用了用引號包圍字符串的做法。例如,為了引用記錄集RS字段集合中的“Cows”字段,你可能使用:
- RS("Cows") 或者: RS.Fields("Cows").Value
后面這種方法顯式地引用了記錄集內(nèi)Fields集合中指定成員的Value屬性。ADO.NET語句這種方法要稍微快一點,而且當你把這些代碼向Visual Basic.NET遷移時,它的向上兼容性也要好一些。上述方法的一種變化是使用感嘆號(!)操作符:
- RS!Cows
與先行綁定(Early-Binding)相比,采用上述方法時COM進行解析的時間要長得多,ADO.NET語句這是因為它們強制COM在運行時(而不是在編譯時)解析對Value屬性的引用,每一次對該對象的引用都要求有一系列類似的、后臺進行的查找過程。
然而,使用延遲綁定時,不存在代碼引用的是哪一個列這類問題。ADO.NET語句如果你完全按照下列方式編寫代碼。