如何使用Web服务提高XtraReports的性能以获取数据?

时间:2009-09-07 18:04:05

标签: c# .net web-services devexpress xtrareport

我正面临使用XtraReports工具和关于性能的Web服务的潜在问题。在Windows窗体应用程序中。

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

方案如下:

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

如果结果数据集很大,序列化+转移时间可能相当大,然后呈现报告可能会增加一些时间,从而降低整体性能。

我知道有可能使用流媒体视频,但是通过网络服务传输数据,但我没有尝试使用它的主要信息。

您如何看待这个?如果您有任何问题或者我需要写更多信息以便更好地解决问题,请告诉我。

谢谢!

3 个答案:

答案 0 :(得分:2)

有没有办法可以对数据进行分区,即返回一小部分数据?

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

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

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

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

答案 1 :(得分:2)

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

设定期望

报告通常很慢,因为它们必须流失大量数据。没有一个好办法解决它。但除此之外,我会做以下事情:

  1. 将数据加载序列化为二进制状态,转换为可通过soap(例如base64)转移的内容并传输。这样你就可以避免使用很多无用的尖括号。
  2. 尽可能在客户端上预先处理数据。
  3. 关注应用程序的感知性能。例如,将报告数据收集到后台线程,这样用户就可以去做其他工作,然后在报告可用时向用户显示通知。
  4. 有时候,可以提前生成最常用标准的报告,并在被问及时提供。

答案 2 :(得分:1)

转移DataSet是个坏主意。 DataSet有很多无用的日期。使用简单对象。在服务器端使用ORM。 您也可以预先确定一些数据。可以在客户端缓存参考,然后将其与服务器数据结合使用。