C# 如何使用web服务获取数据来提高XtraReports的性能?

C# 如何使用web服务获取数据来提高XtraReports的性能?,c#,.net,web-services,devexpress,xtrareport,C#,.net,Web Services,Devexpress,Xtrareport,我在使用XtraReports工具和一个关于性能的web服务时遇到了一个潜在的问题。在Windows窗体应用程序中 我知道XtraReport通过加载第一个页面然后在后台继续加载其余页面来加载大型数据集(我理解大型数据集为+10000行),但所有这些都是通过手头的数据源完成的。那么,如果此数据源必须通过web服务,而web服务需要序列化数据才能将其发送到客户端,会发生什么情况呢 情况如下: 我有一个windows窗体的瘦客户机,它调用web服务,web服务接受该调用,并通过反射实例化相应的类并调

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

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

情况如下:

我有一个windows窗体的瘦客户机,它调用web服务,web服务接受该调用,并通过反射实例化相应的类并调用所需的方法(请注意,此体系结构是继承的,在这方面我几乎没有选择,我必须使用它)。因此,我将有一个类,该类从数据库获取数据,并通过web服务接口将其发送给客户端。这些数据可以是数据集、SqlDataReader(请注意,我们使用的是SQLServer2000,但年底可能是2008年)、DataTable、XML等

如果结果数据集很大,则序列化+传输时间可能相当长,然后呈现报表可能会增加一些时间,从而降低总体性能

我知道有可能使用流式视频之类的东西,但是通过web服务来流式传输数据,但我没有尝试相关内容的潜在客户信息

你觉得这个怎么样?请让我知道你可能有任何问题,或者如果我需要写更多的信息更好地说明问题


谢谢

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

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

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

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

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

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

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

    • 有没有一种方法可以对数据进行分区(即返回数据的一小部分)

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

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

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

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

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

          设定期望值

          报告的速度通常很慢,因为它们必须处理大量数据。只是没有一个好的方法可以绕过它。但如果不这样做,我会做以下几点:

        • 将数据加载序列化为二进制状态,转换为可通过soap(例如base64)传输的数据,然后传输。这样可以避免大量无用的尖括号
        • 在客户端上预缓存尽可能多的数据
        • 关注应用程序的感知性能。例如,将报告数据收集抛到后台线程上,以便用户可以继续执行其他工作,然后在报告可用时向用户显示通知
        • 有时,可以提前生成最常用标准的报告,并在询问时提供

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

          设定期望值

          报告的速度通常很慢,因为它们必须处理大量数据。只是没有一个好的方法可以绕过它。但如果不这样做,我会做以下几点:

        • 将数据加载序列化为二进制状态,转换为可通过soap传输的内容(例如base64)