从DbDataReader读取数据最快的方法是什么?在下面的代码中,command就是已经设置好的DbCommand:这些都是需要所有时间的。将它们全部替换为reader.GetValues(myArray)没有任何影响。val0=dataReader.GetValue(0);val1=dataReader.GetValue(1);val2=dataReader.GetValue(2);我目前正在处理的查询大部分时间都花在GetValue调用上。它是否为每个GetValue调用进行数据库往返?好像是这样,而且效率很低。正如代码所说,尝试使用GetValues()一次完成它并没有什么不同。有没有办法一次得到整行?更好的是,有没有办法一次性获得整个结果集?谢谢。使用(连接){SqlCommandcommand=newSqlCommand(“SELECTCategoryID,CategoryNameFROMdbo.Categories;”+“SELECTEmployeeID,LastNameFROMdbo.Employees”,connection);connection.Open();SqlDataReaderreader=command.ExecuteReader();while(reader.HasRows){Console.WriteLine("t{0}t{1}",reader.GetName(0),reader.GetName(1));while(reader.Read()){Console.WriteLine("t{0}t{1}",reader.GetInt32(0),reader.GetString(1));}reader.NextResult();}}我用各种方法做了一些基础测试:publicDataTableRead1(stringquery){using(varcmd=conn.CreateCommand()){cmd.CommandText=query;cmd.Connection.Open();vartable=newDataTable();使用(varr=cmd.ExecuteReader())table.Load(r);返回表;}}publicDataTableRead2(字符串查询)whereS:IDbDataAdapter,IDisposable,new(){using(varda=newS()){using(da.SelectCommand=conn.CreateCommand()){da.SelectCommand.CommandText=询问;数据集ds=new数据集();da.Fill(ds);返回ds.Tables[0];}}}publicIEnumerableRead3(stringquery,Funcselector){using(varcmd=conn.CreateCommand()){cmd.CommandText=query;cmd.Connection.Open();使用(varr=cmd.ExecuteReader())while(r.Read())yieldreturnselector(r);}}publicS[]Read4(stringquery,Funcselector){using(varcmd=conn.CreateCommand()){cmd.CommandText=query;cmd.Connection.Open();使用(varr=cmd.ExecuteReader())return((DbDataReader)r).Cast().Select(selector).ToArray();}}publicListRead5(stringquery,Funcselector){using(varcmd=conn.CreateCommand()){cmd.CommandText=query;cmd.Connection.Open();使用(varr=cmd.ExecuteReader()){varitems=newList();while(r.Read())items.Add(selector(r));退换货品;}}}1和2返回一个DataTable,而其余的是强类型结果集,所以它根本不是同类产品,但我会相应地计时只是要点:秒表sw=Stopwatch.StartNew();for(inti=0;i().Select(selector).ToArray();//~9000-9400msRead2(query);//~1750-2000msRead2(query).Rows.Cast().Select(selector).ToArray();//~1850-2000msRead3(query,selector).ToArray();//~1550-1750msRead4(query,selector);//~1550-1700msRead5(query,selector);//~1550-1650ms}sw.Stop();MessageBox.Show(sw.Elapsed.TotalMilliseconds.ToString());查询返回了大约1200行和5个字段(运行100次)。除Read1外,其他都表现良好。我像Read3,Read3像枚举一样返回数据。如果你只需要枚举它,这对内存有好处。要在内存中拥有该集合的副本,你最好使用Read5或Read5。我会使用dapper之类的东西-dot-net将其加载到基本类型模型中;它是一个很小的??ORM,因此您可以进行元编程(有效地预生成IL等)-没有EF或DataTable之类的开销。DimadapterAsNewData.SqlClient.SqlDataAdapter(sqlCommand)DimDTAsNewDataTableadapter.Fill(DT)您可以使用DbDataAdapter获取所有结果并将它们存储在DataTable中。使用无类型数据集。据我所知,这是最快的。以上就是C#学习教程:从DbDataReader读取数据最快的方法是什么?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
