0

我在使用 XtraReports 工具和有关性能的 Web 服务时遇到了潜在问题。在 Windows 窗体应用程序中。

我知道 XtraReport 通过加载第一页然后继续在后台加载其余页面来加载大型数据集(我将大型数据集理解为 +10,000 行),但这一切都是通过手头的数据源完成的。那么如果这个数据源必须通过一个需要序列化数据以便将其发送到客户端的 Web 服务会发生什么?

场景如下:

我有一个 Windows 形式的瘦客户端,它调用 Web 服务,它接受该调用并通过反射实例化相应的类并调用所需的方法(请注意,这个架构是继承的,我对此几乎别无选择,我必须使用它)。所以我将有一个类从数据库中获取数据并通过 Web 服务接口将其发送到客户端。这些数据可以是 DataSet、SqlDataReader(还要注意我们使用的是 SQL Server 2000,但到年底可能是 2008)、DataTable、XML 等。

如果结果数据集很大,序列化+传输的时间会比较长,然后渲染报表会增加一些时间,降低整体性能。

我知道有可能使用流式视频之类的东西,但可以通过网络服务流式传输数据,但我没有线索信息可以尝试围绕它做一些事情。

你怎么看待这件事?请让我知道您可能有的任何问题,或者如果我需要写更多信息以更好地说明问题。

谢谢!

4

3 回答 3

2

有没有一种方法可以对数据进行分区,即返回其中的一小部分?

如果没有绝对要求同时返回所有数据,那么在从数据库读取、序列化和通过 web 服务传输时,将数据分成更小的部分将产生巨大的差异。

编辑:我已经删除了这个答案,因为你已经提到了分区。我现在正在取消删除它,也许它可以作为讨论的起点......

至于您关于如何使用分页的观点:我认为您使用“显示下一个 100 个结果”方法走在正确的轨道上。我不知道 XtraReport 是如何工作的,以及它对数据源的要求是什么。我看到了3个问题:

  • 服务器对分区数据的支持(例如,您的 Web 服务应该支持仅返回“第 3 页”的数据
  • 汇总数据 - 您的报告是否有一排总计或平均值?这些是由 XtraReport 控件计算的吗?是否需要完整的数据集来显示这些结果?您能否自行向控件提供摘要(并找到一种更有效的方法来计算它们而不返回整个数据集?)
  • XtraReport 支持使用分页的数据源。
于 2009-09-07T18:27:02.453 回答
2

我会给你一个你可能不想听到的答案。

设定期望

报告通常很慢,因为它们必须处理大量数据。只是没有一个很好的方法来解决它。但除此之外,我会执行以下操作:

  1. 将数据加载序列化为二进制状态,转换为可通过soap(例如base64)传输的东西并传输它。这样你就可以避免很多无用的尖括号。
  2. 在客户端上预缓存尽可能多的数据。
  3. 关注应用程序的感知性能。例如,将收集的报表数据放到后台线程中,这样用户就可以去做其他工作,然后在报表可用时向用户显示通知。
  4. 有时,可以提前为最常用的标准生成报告,并在被询问时提供。
于 2009-09-08T05:23:06.793 回答
1

传输数据集是个坏主意。DataSet 有很多无用的日期。使用简单对象。在服务器端使用 ORM。您也可以预先计算一些数据。引用可以缓存在客户端上,然后与服务器数据连接。

于 2009-09-07T18:11:37.120 回答