在以下代码中,command是已经设置的DbCommand:
using( var dataReader = command.ExecuteReader() /*The actual execution of the query takes relatively little time.*/ ) {
while( dataReader.Read() ) {
// These are what take all of the time. Replacing them all with reader.GetValues( myArray ) has no impact.
val0 = dataReader.GetValue( 0 );
val1 = dataReader.GetValue( 1 );
val2 = dataReader.GetValue( 2 );
}
}
Run Code Online (Sandbox Code Playgroud)
我目前正在处理的查询的大部分时间都花在了GetValue调用上.它是否为每个GetValue调用进行数据库往返?看起来似乎是这样,这看起来非常低效.正如代码所指出的那样,尝试使用GetValues()一次性完成它并没有什么不同.有没有办法一次性获得整行?更好的是,有没有办法一次性获得整个结果集?
谢谢.
DataSets比DataReader从DB检索数据慢10倍.我认为这是由于开销,DataSets不必处理关系等,但之间的速度差DataSets,并DataReader由于DataSets其检索更多的数据信息(有关关系...)从数据库,或由于有做多处理应用,或两者?
我假设在引擎盖下DataAdapter使用DataReader,因此应用程序需要执行的命令数量,以便检索100行,DataAdapter等于或大于应用程序需要执行的命令数量,如果直接检索这100行DataReader.是否DataReader同时检索当时的一行或一个字段(特定行的)?
使用ADO.NET,从数据库中检索数据并将数据填充到业务对象中的最快方法是什么?
我应该使用哪一个?DBDataReader,DBDataAdapter或任何其他类?
有没有办法让这个过程自动化?假设基于属性名称并将它们与数据库字段名称匹配?