皕杰报表之性能管理

1 报表缓存

当某个客户端访问某个报表,引擎将其计算出来后,会将运算结果缓存下来,之后如果再有别的客户端用相同的参数访问同一个报表,引擎会将缓存下来的报表结果直接返回给该客户端,而不会重新计算报表。

这种缓存方式在大用户并发的情况下可以大大的提高性能,缓解服务器的计算压力。同时,当同一个客户端访问完该报表后,如果需要对同一报表结果进行别的操作,例如打印、导出、翻页等,引擎也直接从缓存里取报表结果,而不必重新计算。

缓存报表的存储有两种方式:一、直接存到硬盘上 二、同时存到内存和硬盘,在内存中处于软引用状态。当内存够用时一直在内存中保持着,引擎需要的时候直接从内存中取,交互速度快,当内存不够时缓存被当成垃圾回收,引擎需要的时候从硬盘上读取。

皕杰报表还支持缓存组,即根据缓存的缓存时间不同,将报表分组缓存。

缓存组的设置方法:点击报表根格,选中报表,在右侧属性的缓存组属性中设置缓存组名称,该名称要与配置文件中<group>节点的name属性保持一致,同时在该标签中可以对缓存中的最大对象数及缓存时间进行设置。可同时设置多个缓存组,即可以有多个<group>节点,但<group>节点的name属性值不能重复。

如果报表没有设置缓存组,则执行默认缓存时间。

2 并发控制

当报表引擎已经没有优化余地时,如果服务器资源依旧吃紧,可以控制应用服务器的并发数。不同的应用服务器,其并发数的控制机理会略有区别,具体的配置方法请参见服务器厂商提供的文档。

3 JVM内存

JVM堆栈内存是决定应用服务器性能的关键指标,由于JAVA的自动垃圾回收机制以及其屏蔽了指针的应用,导致了JAVA程序占用的内存总是比C语言程序占用的内存大,因此JAVA程序最常见的性能问题就是内存溢出, 当内存不够时,可以加大JVM堆栈内存,最大可以加到2G(32位的JVM)

4 按需取数

当报表数据量很大,结果报表格子数也很多的时候,如果报表的运算并不复杂,没有跨行组的运算,可以采用按页取数的办法,该办法可以从根本上缓解大报表的内存压力。

该办法的原理是:每次只取出一页数据进行报表运算,当翻页时取下一页数据进行运算,这样每次内存中只保留一页的数据,大大加快了运算速度,减轻了内存压力。

用户根据数据量的大小可以创建不同的报表类型,当数据量较少,可直接用“普通报表”,若数据量过大,有可能影响运行速度的话,可使用“行式报表”。

5 流式导出

“行式报表”解决了报表在浏览器上展示时的性能问题,但是当“行式报表”导出excel时,依然会遇到性能问题,可以采用把导出格式配置诚xlsx格式的方式来解决这个问题。

该方式的原理是:无论报表是否是“行式报表”,xls格式导出都是采用Java对象方式来操作Excel文件。而导出为xlsx格式则是根据报表类型不同而采用不同的技术手段,当报表为“行式报表”时,采用数据流的方式来操作Excel文件,否则采用Java对象的方式。

采用Java对象方式操作Excel文件,快,但是耗用内存多;采用数据流方式操作Excel文件,慢,但是耗用内存少。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值