0

我有一个将在美国和中国使用的 Winform 应用程序。SQL Server 2005 数据库在美国,所以中国的人访问数据会比较慢。我正在决定使用 DataReader 和 Dataset 以获得最佳性能。数据将在检索后立即加载到业务对象中。

问题:哪一个性能更好(DataReader/DataSet)从远处的数据库中提取数据?我已经读到 DataReader 会为每个 .Read() 返回数据库,所以如果连接开始时很慢,DataSet 会是这里更好的选择吗?

谢谢

4

6 回答 6

1

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

不过,DataSet 可能会使用更多内存,如果您要处理大量数据,这可能是一个问题。

于 2009-07-24T15:03:53.613 回答
0

取决于数据量。您不能在内存(数据集)中存储过多的数据。

我认为解决问题的两种方法:
-并行化(System.Thread)
-后台工作人员

第一个可以提高 linq to sql 情况下的性能。第二个可以帮助最终用户获得更好的体验(非块状 UI)。

于 2009-07-24T14:39:52.403 回答
0

我认为这并不重要,因为连接是瓶颈。

两者都使用相同的机制来获取数据(ADO.NET/Datareader)。

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

于 2009-07-26T06:25:31.467 回答
0

取决于它是什么数据库。如果是 Access,情况会很糟糕。
取决于移动了多少数据,使用方式是什么?来自中国的用户会只是读取或读取/写入公共数据吗?他们需要查看所有数据吗?

这个想法是,分离数据(如果它有助于场景)并将其合并回来。

于 2009-07-26T07:21:14.647 回答
0

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

于 2009-07-28T15:11:55.040 回答
0

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

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

于 2009-12-16T07:06:26.647 回答