如果使用数据集,请对它们进行缓存

在 Crystal Reports for Visual Studio 项目中优化可伸缩性的另一种方法是对项目中使用的任何数据集进行缓存。

何时使用数据集

如上一节所述,数据集用于以下情况:

  • 运行查询后需要修改数据集中的数据。
  • 需要联接多个数据源中的数据。
    Note注意

    数据集是数据(通常在数据库中)的 xml 表示形式。D数据集不等同于数据库中的单个表,而是等同于一组表。这就构成了报表潜在的可伸缩性问题。如果某个报表检索数据集中的多个表并且这些表之间需要联接,则报表在与每个单独的表进行交互时必须执行联接处理。这不是一个有效的过程。在任何情况下,一种更好的方法是将联接语句放在用于填充数据集的查询中。这将在数据集中产生预联接数据的单个“伪表”,这样报表可以集中资源进行数据显示。

如何缓存数据集

如果对数据集进行缓存,那么它们将成为更有用的可伸缩性工具。原因如下:

在运行时加载报表时,Crystal Reports 报表引擎将试图执行数据库连接池。例如,如果三个用户命中具有相同报表的同一个 ASPX 页,则单个数据库连接将对所有这三个查询执行池操作。但是,不对查询本身执行池操作。即使查询在所有三个情况下都是相同的,每次从报表引擎请求报表时也必须执行该查询。对于较慢的查询或较大的数据集,这种以每个用户为基础的查询可能会成为应用程序的瓶颈。

多次执行这种相同的基于每个用户的查询将导致不必要地填充数据集,从而产生过多的内存系统开销,这种情况更糟。

若要减少对数据库查询的数目,请在第一次查询后将数据集放入 ASP.NET Cache 对象中,以便所有报表作业共享 Cache 中的单个数据集。

Note注意

关于缓存数据集的信息在本教程的附录中。

请参见