2010-03-25 44 views
3

有谁知道DbDataReaders实际上是如何工作的。我们可以使用SqlDataReader作为例子。SqlDataReader/DbDataReader实现问题

当你做对以下

cmd.CommandText = "SELECT * FROM Customers"; 

var rdr = cmd.ExecuteReader(); 

while(rdr.Read()) 
{ 
    //Do something 
} 

是否数据读取器都行的内存,或者它只是抢一个,然后当读取被调用时,它进入数据库,并抢下一个?看起来只是将一个内存带入内存将会是一个糟糕的表现,但将它们全部引入到ExecuteReader的调用中需要一段时间。

我知道我是对象的消费者,他们如何实现它并不重要,但我只是好奇,我想我可能会花几个小时在Reflector中获得一个想法它在做什么,所以我想我会问一个可能知道的人。

我只是好奇,如果任何人有一个想法。

回答

5

如上所述here

使用DataReader可以通过 检索数据尽快提高 应用性能两者,因为它是 可用,并且(默认)存储 只有一行在存储器中的时间, 减少系统开销。

而据我所知,这是每个读者在.NET框架中工作的方式。

4

狂想曲是正确的。

结果返回查询 执行,并存储在客户端上的 网络缓冲区,直到你 使用 Read方法DataReader的

我跑的测试要求他们在等10,000记录数据集上使用DataReaders vs DataAdaptor,我发现DataAdaptor的持续时间比DataReader快3-4毫秒,但DataAdaptor最终会占用更多的内存。

当我在相同的50,000条记录数据集上运行相同的测试时,我看到DataReader端的性能增益达到了50毫秒。因此,如果你有一个长时间运行的查询或者一个巨大的结果集,我认为你可能更适合使用DataReader,因为你可以更快地得到结果,而不必拘泥于所有的数据记忆。记住DataReader只是前向也很重要,所以如果你需要在结果集中移动,那么它不是最好的选择。