DataSets
可以比慢10+次DataReader
从数据库中检索数据。 我认为这是由于开销DataSets
必须处理的关系等,但之间的速度差DataSets
和DataReader
,由于DataSets
必须从数据库中检索更多的数据(约关系的信息......),或由于不必应用做更多的处理,或两者兼而有之?
我假定DataAdapter
使用DataReader
引擎盖下,从而命令应用的数量需要以检索100行与执行DataAdapter
比应用程序需要,如果这些100行是通过直接检索要执行的命令的数量等于或大于DataReader
。 是否DataReader
同时检索当时的一行或一个字段(特定行的)?
有几种不同的类型,可以使用超过一个DataReader数据集时发生的开销:
甲DatSet包含DataTable对象,其中包含DataRow对象,包含数据。 有一个小的开销创建的所有对象。 每个DataRow的对待所有它的值对象,因此任何值类型装箱它增添了几分开销为每个字段。
当您使用DataAdapter填充DataSet,很容易得到很多,你不会使用的数据。 如果没有指定你想要的领域,你的所有领域,即使你不会使用它们。 如果不过滤查询,你得到所有从表中的行。 即使你在数据表一个DataView后进行筛选,你还是从数据库中获取它们。 使用DataReader你离来查询得到的数据,所以您在结果得到的连接更为明显。
如果您获取数据到一个DataSet,并使用关系数DataTable对象,让数据集相结合的数据,使数据集做,你可以有让数据库工作要做,这是更多的钱进行了优化。
如果您使用DataSet好,开销并不坏,而不是30%,比1000%。
你是正确的假设一个DataAdapter用一个DataReader。 如果你如何使用DataAdapter都小心翼翼,对数据库的操作本身是一样的,如果你自己使用DataReader。
一个DataReader将在底层数据库驱动程序,这反过来将在从数据库中获取的时间一个完整的记录缓冲时间取的记录。 如果记录是非常大的只有一次一个可能适合的缓冲,但通常都在几十缓冲记录甚至上百个,如果他们真的很小。
一个DataReader
是类似于一个只进记录的老ADO概念。 仅向前记录不需要保持任何形式的指针信息,因此总是比传统快DataSet
实例。 甲DataReader
,因此,不高速缓存任何数据,需要打开的连接到数据库,以获得底层数据。
这就解释了为什么你需要写一个下面的代码DataReader
:
DataReader reader = GetANewDataReaderInstance();
while (reader.Read())
{
...
}
现在对一个DataSet
,事情改变了不少。 从本质上讲,你可以拉在数据库模式中的一个子集到DataSet
,像表的关系,删除和更新规则,当然,自动重新填充行的数据集里面,当你提交的数据的数据存储。 DataSets
还可以在“断开连接”的方式,这意味着你可以得到你所需要的数据和关闭数据库连接操作。
摘要
所有这些功能但是确实是有代价的:如果你正在寻找尽可能快地填充自定义业务对象,一起去DataReader
š否则一起去DataSet
秒。
要非常小心你在互联网搜索发现什么。 您发布的文章说,
与候选发布版的.NET的一个写的VB.NET应用
这是大约七年前!
一定要看到的东西多一点电流:
- 新的数据集功能在ADO.NET 2.0
- 在ADO.NET 2.0异步命令执行
有一个读我为什么没有在我的ASP.NET应用程序使用数据集由斯科特·米切尔。 它涵盖了要点你有兴趣,我想。
我更喜欢使用的DataReader来填充列表。
您可以检查出我的问题我最近asekd这个有一些很好的意见/回答:
数据集