Winform中的Datareader或Dataset长途访问数据库?

时间:2009-07-24 14:36:13

标签: performance dataset datareader data-access-layer

我有一个将在美国和中国使用的Winform应用程序。 SQL Server 2005数据库位于美国,因此中国人的数据访问速度会变慢。我决定使用DataReader和数据集来获得最佳性能。在检索时,数据将立即加载到业务对象中。

问题:哪个表现更好(DataReader / DataSet)从远离的数据库中提取数据?我已经读过DataReader为每个.Read()返回数据库,所以如果连接开始很慢,那么DataSet会不会是更好的选择?

由于

6 个答案:

答案 0 :(得分:1)

如果您期望长距离/慢速链接,那么与数据库往返相比,datareader与数据集的性能几乎无法衡量。

DataSet可能会使用更多内存,如果您正在处理很多数据,这可能会引起关注。

答案 1 :(得分:0)

取决于数据量。您无法在内存(数据集)中存储太多的数量。

我心中有两种解决问题的方法:
- 并行化(System.Thread)
- 背景工作者

第一个可以提高linq到sql案例的性能。第二个可以帮助最终用户获得更好的体验(非流畅的UI)。

答案 2 :(得分:0)

我认为无所谓,因为连接是瓶颈
两者都使用相同的机制来获取数据(ADO.NET/Datareader)。

如果你能做到这一点,你可以在服务器上压缩查询结果然后将其发送给客户端。这样可以提高性能。

答案 3 :(得分:0)

取决于它是什么数据库。如果是Access,则表示不良情况 取决于移动了多少数据,使用方式是什么?来自中国的用户是否会阅读或读取/写入常见数据?他们需要查看所有数据吗?

这个想法是,将数据分开(如果它有助于方案)并将其合并。

答案 4 :(得分:0)

由于DataSet使用DataReader来填充,因此选择哪个并不重要。尽量避免通过缓存结果或获取额外数据来尽可能地调用数据库。一些获得额外数据的调用可能会胜过表中的很多小啄。也许BackgroundWorker可以预加载一些您知道将要使用的数据。

答案 5 :(得分:0)

仅供其他读者使用:DataReader的性能更高。显然,这些用户没有尝试过使用两者并实际测试了差异。使用DataReader加载1,000条记录,使用DataSet加载1,000条记录。然后尝试将DataSet的记录限制为10条记录(使用适配器的Fill方法,以便加载1,000条,但只有10条填充/填充到DataSet中)。

我真的不知道为什么DataSets在填充操作期间性能如此糟糕,但差别很大。创建自己的集合并使用DataReader填充它们比使用非常臃肿和缓慢的DataSet要快得多。