1

SqlDataReader访问值时,这两者之间是否存在性能差异:

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 源代码,两种访问方法本质上是相同的。唯一的区别是第二个做了一个额外的拳击。所以第一个对应于类似的东西(在基本类型的情况下):

int key = GetInternalSQLDataAsInt32("Key");

而第二个是:

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 回答