DataSets
比DataReader
从DB检索数据慢10倍.我认为这是由于开销,DataSets
不必处理关系等,但之间的速度差DataSets
,并DataReader
由于DataSets
其检索更多的数据信息(有关关系...)从数据库,或由于有做多处理应用,或两者?
我假设在引擎盖下DataAdapter
使用DataReader
,因此应用程序需要执行的命令数量,以便检索100行,DataAdapter
等于或大于应用程序需要执行的命令数量,如果直接检索这100行DataReader
.是否DataReader
同时检索当时的一行或一个字段(特定行的)?
在DataReader上使用DataSet时可能会出现一些不同类型的开销:
DatSet包含DataTable对象,其中包含DataRow对象,其中包含数据.创建所有对象的开销很小.每个DataRow都将它的所有值视为对象,因此任何值类型都被加框,这会为每个字段增加一些开销.
当您使用DataAdapter填充DataSet时,很容易获得大量您不会使用的数据.如果您没有指定所需的字段,即使您不使用所有字段,也会获得所有字段.如果不筛选查询,则从表中获取所有行.即使您稍后使用DataTable上的DataView过滤它们,您仍然可以从数据库中获取它们.使用DataReader,您更接近获取数据的查询,因此与结果中的结果的连接更加明显.
如果您将数据提取到DataSet中的多个DataTable对象并使用关系让DataSet合并数据,那么您可以让DataSet完成您可以让数据库执行的操作,这对它更加优化.
如果你使用DataSet,那么开销并不是那么糟糕,而是30%而不是1000%.
假设DataAdapter使用DataReader是正确的.如果您在使用DataAdapter时非常小心,数据库操作本身就像您自己使用DataReader一样.
DataReader将一次从底层数据库驱动程序获取一条记录,而后者又将从数据库中一次获取一个满记录的缓冲区.如果记录非常大,一次只有一个可能适合缓冲区,但通常缓冲区中有数十条记录,如果它们非常小,则甚至数百条记录.
关于MSDN的几点建议:
基准
DataSet与DataReader
使用DataReaders,DataSet,DataAdapter和DataViews