缓存具有“高可共享性”的报表

在 Crystal Reports for Visual Studio 项目中优化可伸缩性的另一种方法是对具有“高可共享性”的报表进行缓存。

如何定义具有“高可共享性”的报表?

具有与所有用户相关的公共信息的报表具有高可共享性;例如显示整个公司季度利润的报表。相比之下,显示个人累积假期的报表是属于特定用户的,因此可共享性较低。

持久性和可共享性

大多数报表的查看需要经过多次页重新加载过,要么是查看报表中的另一页,要么是反映根据与查看器的工具栏或运行时代码进行交互所发生的更改。若要在页重新加载过程中保持报表的状态,必须将其存储(即保持)在服务器内存中。

有多种持久性方法可供选择。“应该对 Crystal Reports 使用哪种持久性方法?”中对这些方法进行了详细介绍。但是,大多数报表的保持是通过将报表放入用户的 Session 对象或应用程序的 Cache 对象实现的。具有低可共享性的报表应该使用用户的 Session 对象来保持,(请参见 “Session 和 ReportDocument 对象模型的持久性”)。具有高可共享度的报表应该使用应用程序的 Cache 对象来保持,(请参见 “Cache 和 ReportDocument 对象模型的持久性”)。

持久性和可伸缩性

适当地使用持久性可通过防止不必要地使用服务器内存以实现更好的可伸缩性。例如,如果将具有低可共享性的报表放入应用程序的 Cache 对象中,则会浪费内存,这是因为在用户退出应用程序很长一段时间之后,特定用户的报表仍保留在 Cache 中。反之,如果将具有高可共享性的报表放入用户的 Session 对象中,则也会浪费内存,并会生成巨大的冗余,这是由于存储了某个报表的多个实例,而需要的实例只有一个。

对具有低可共享性的报表使用用户级持久性 (Session) 并对具有高可共享性的报表使用应用程序级持久性 (Cache) 将最大程度地提高服务器内存的可伸缩性。