c# - SqlDataReader 在访问值方面的性能差异?

标签 c# asp.net sqldatareader

当从 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();
    }
}

最佳答案

我刚刚浏览了 .NET 源代码,这两种访问方法本质上是相同的。唯一的区别是第二个进行了额外的装箱。所以第一个对应于类似的东西(在基本类型的情况下):

int key = GetInternalSQLDataAsInt32("Key");

而第二个是:

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

GetInternalSQLDataAsInt32(...) 函数表示将数据从 SQL 编码到 .NET 的 SQL 数据库机制。

但正如上文所指出的,基于字符串的键和基于序号的键之间可能存在更显着的差异。

关于c# - SqlDataReader 在访问值方面的性能差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/516637/

相关文章:

c# - sql 选择顶部 X 到 X+N

.net - SqlDataReader 性能缓慢

c# - Log4net 生成错误的日志文件名

c# - 为什么 EF 在进行一对多连接时会不必要地检索 ID?

c# - Crystal 报表模板?

asp.net - 信号器是否为同一应用程序内的每个集线器创建连接,或者所有集线器共享相同的连接?

c# - 使用 SQL DataReader 捕获插入或删除的值

c# - IEnumerator 给出空异常,但不为空

c# - 如何检查 Request.QueryString 在 ASP.NET 中是否具有特定值?

ASP.Net 连接为长时间运行的服务器端任务保持事件状态