2009-07-03 54 views

回答

11

我認爲,之所以使用GetOrdinal ()可以緩存結果並多次重複使用以提高性能。

E.g.

Dim reader As SqlClient.SqlDataReader 
int valueOrdinal = reader.GetOrdinal("value"); 
while (...) 
{ 
    var value = reader.GetString(valueOrdinal); 
} 
+0

是否有人有關於使用GetOrdinal(..)行循環中相比,例如,從DB的實際數據檢索的性能影響的想法? – 2013-06-05 16:12:49

+3

我有一個Web API服務的性能測試,它從DB存儲過程(包含多個結果集)中讀取約30-40條記錄並返回約8K大小的Json。在這個測試中,我將所有的GetOrdinal()替換爲靜態的常量,結果我得到了2%的性能提升......所以創建這種類型的列名緩存是值得的。 - 我想在大多數情況下不是。從數據庫和數據序列化中讀取數據到Json的真實情況將會更多地影響性能,所以我認爲當你已經優化了其他所有內容時,緩存的序號將是最後一件事情... – 2014-12-27 21:04:09

1

我只想補充一點,你有多少條記錄預期的背景下起了很大的作用,因爲如果你是返回一個單行那麼這兩個之間的性能差異也不會顯著。但是,如果您要循環多行,那麼使用類型化訪問器對性能更好,因爲它已經過優化。所以在這種情況下,如果您需要使用列名稱來獲得最佳性能,請調用GetOrdinal一次,將其放入一個變量中,然後在循環中使用帶有列序號的類型化存取器。這將產生最佳性能。

,如果你是好奇的性能差異退房my blog post

相關問題