gpt4 book ai didi

c# - SqlDataReader 这两个是一样的哪个更快

转载 作者:太空狗 更新时间:2023-10-30 00:16:16 26 4
gpt4 key购买 nike

我正在使用 SqlXml 和返回 xml 而不是原始数据的存储过程。当返回的是一个 xml 并且不知道列名时,如何实际读取数据。我使用了以下版本,听说通过序号从 SqlDataReader 获取数据比通过列名更快。请给出最好的建议,并提供合理的理由或证据

  1. sqlDataReaderInstance.GetString(0);

  2. sqlDataReaderInstance[0];

最佳答案

and have heard getting data from SqlDataReader through ordinal is faster than through column name

你的两个例子都是通过索引(序号)获取数据,而不是列名:

通过列名获取数据:

while(reader.Read())
{
...
var value = reader["MyColumnName"];
...
}

可能比通过索引获取数据慢:

int myColumnIndex = reader.GetOrdinal("MyColumnName");
while(reader.Read())
{
...
var value = reader[myColumnIndex];
...
}

因为第一个例子必须反复查找“MyColumnName”对应的索引。如果您有非常多的行,差异甚至可能会很明显。

在大多数情况下,差异不会很明显,因此请注意可读性。

更新

如果您真的很关心性能,使用序数的替代方法是使用 DbEnumerator类如下:

foreach(IDataRecord record in new DbEnumerator(reader))
{
...
var value = record["MyColumnName"];
...
}

DbEnumerator 类读取模式一次,并维护一个将列名映射到序号的内部哈希表,这可以提高性能。

关于c# - SqlDataReader 这两个是一样的哪个更快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7831574/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com