当前位置:  开发笔记 > 编程语言 > 正文

由于......,DataSet比DataReader慢吗?

如何解决《由于,DataSet比DataReader慢吗?》经验,为你挑选了2个好方法。

DataSetsDataReader从DB检索数据慢10倍.我认为这是由于开销,DataSets不必处理关系等,但之间的速度差DataSets,并DataReader由于DataSets其检索更多的数据信息(有关关系...)从数据库,或由于有做多处理应用,或两者?

我假设在引擎盖下DataAdapter使用DataReader,因此应用程序需要执行的命令数量,以便检索100行,DataAdapter等于或大于应用程序需要执行的命令数量,如果直接检索这100行DataReader.是否DataReader同时检索当时的一行或一个字段(特定行的)?



1> Guffa..:

在DataReader上使用DataSet时可能会出现一些不同类型的开销:

DatSet包含DataTable对象,其中包含DataRow对象,其中包含数据.创建所有对象的开销很小.每个DataRow都将它的所有值视为对象,因此任何值类型都被加框,这会为每个字段增加一些开销.

当您使用DataAdapter填充DataSet时,很容易获得大量您不会使用的数据.如果您没有指定所需的字段,即使您不使用所有字段,也会获得所有字段.如果不筛选查询,则从表中获取所有行.即使您稍后使用DataTable上的DataView过滤它们,您仍然可以从数据库中获取它们.使用DataReader,您更接近获取数据的查询,因此与结果中的结果的连接更加明显.

如果您将数据提取到DataSet中的多个DataTable对象并使用关系让DataSet合并数据,那么您可以让DataSet完成您可以让数据库执行的操作,这对它更加优化.

如果你使用DataSet,那么开销并不是那么糟糕,而是30%而不是1000%.

假设DataAdapter使用DataReader是正确的.如果您在使用DataAdapter时非常小心,数据库操作本身就像您自己使用DataReader一样.

DataReader将一次从底层数据库驱动程序获取一条记录,而后者又将从数据库中一次获取一个满记录的缓冲区.如果记录非常大,一次只有一个可能适合缓冲区,但通常缓冲区中有数十条记录,如果它们非常小,则甚至数百条记录.



2> Darin Dimitr..:

关于MSDN的几点建议:

基准

DataSet与DataReader

使用DataReaders,DataSet,DataAdapter和DataViews

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有