1

SqlDataReaderから値にアクセスする場合、次の2つの間にパフォーマンスの違いがあります。

string key = reader.GetString("Key");

また

string key = reader["Key"].ToString();

このコードサンプルでは:

string key;

using (SqlDataReader reader = cmd.ExecuteReader())
{
    while (reader.Read())
    {
        key = reader.GetString("Key");
        // or
        key = reader["Key"].ToString();
    }
}
4

4 に答える 4

3

Microsoft MVP がこれについてブログ エントリを書きました: http://jeffbarnes.net/portal/blogs/jeff_barnes/archive/2006/08/09/Maximize-Performance-with-SqlDataReader.aspx

彼の結論は次のとおりです。

                                    .NET 1.1    .NET 2.0
Ordinal Position:                   8.47        9.33
Get Methods:                        11.36       8.07
Case Sensitive:                     14.51       12.53
Case Insensitive (All Upper):       13.93   12.23
Case Insensitive (All Lower):       14.47   12.48
Case Insensitive (Mixed):           14.48   12.57

しかし実際には、かなりの数の行を扱っていない限り、心配する必要はありません。

于 2009-02-05T16:31:55.020 に答える
3

.NET ソース コードをのぞいてみましたが、2 つのアクセス方法は基本的に同じです。唯一の違いは、2 番目が追加のボクシングを行うことです。したがって、最初のものは次のようなものに対応します (基本型の場合):

int key = GetInternalSQLDataAsInt32("Key");

2番目のものは次のようになります。

int key = (int)(object)GetInternalSQLDataAsInt32("Key");

GetInternalSQLDataAsInt32(...) 関数は、SQL から .NET にデータをマーシャリングする SQL データ ライブラリ機構を表します。

ただし、上で指摘したように、文字列ベースのキーと序数ベースのキーの間には、より大きな違いが予想されます。

于 2009-02-05T16:45:01.030 に答える
1

たとえあったとしても、そもそもデータベースからデータを取得するコストと比較して、わずかでも重要である可能性は低いです。

個人的には最初のバージョンが好きです。これは、数値を取得して文字列に変換するのではなく、列が文字列列であることを期待していることを示しています。

于 2009-02-05T16:26:48.727 に答える
0

コードを変更する必要がありますが、序数を使用するのが最速の方法です。

于 2009-02-05T16:27:02.270 に答える