gpt4 book ai didi

c# - 从DataReader检索数据的最有效方法是什么?

转载 作者:太空宇宙 更新时间:2023-11-03 18:08:42 26 4
gpt4 key购买 nike

我花费大量时间查询数据库,然后从查询中构建对象的集合。为了提高性能,我倾向于使用Datareader,并且代码类似于:

while(rdr.Read()){
var myObj = new myObj();

myObj.Id = Int32.Parse(rdr["Id"].ToString();

//more populating of myObj from rdr

myObj.Created = (DateTime)rdr["Created"];
}


对于像 DateTime这样的对象,我只是将rdr值转换为所需的类,但是对于 int这样的值类型无法做到这一点,因此(IMHO)费力的 ToString()后跟 Int.Parse(...)

当然,还有另一种选择:

myObj.Id = rdr.GetInt32(rdr.GetOrdinal("Id"));


看起来更干净,并且不涉及对 ToString()的调用。

我和一位同事今天正在讨论这个问题-他建议在上述代码中两次访问 rdr可能不如我以前的惯用方式那样有效-任何人都可以确认或否认这并建议上面哪个是 best做这种事情的方式?我特别欢迎@JonSkeet的回答;-)

最佳答案

我怀疑会有非常明显的性能差异,但是您可以通过将其从循环中移出而避免在每行进行名称查找。这可能是您将能够达到的最佳效果:

int idIdx = rdr.GetOrdinal("Id");
int createdIdx = rdr.GetOrdinal("Created");

while(rdr.Read())
{
var myObj = new myObj();

myObj.Id = rdr.GetFieldValue<int>(idIdx);

//more populating of myObj from rdr

myObj.Created = rdr.GetFieldValue<DateTime>(createdIdx);
}

关于c# - 从DataReader检索数据的最有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21136805/

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