大家可能在第一次使用水晶报表时会因为忘记释放资源导致,用上一段时间遇到水晶报表加载错误:已达到系统管理员配置的最大报表处理作业数限制。
一般情况以下两种方法即可解决问题。
1.直接修改注册表
新建一个.REG文件新建一下注册表值
[HKEY_LOCAL_MACHINE\SOFTWARE\Crystal Decisions\12.0\Report Application Server\InProcServer]
"PrintJobLimit"="1000"
[HKEY_LOCAL_MACHINE\SOFTWARE\Crystal Decisions\12.0\Report Application Server\Server]
"PrintJobLimit"="1000"
2.最直接根本的解决办法
在类中创建全局变量
ReportDocument myReport = new ReportDocument();
新增页面关闭事件,释放资源。
protected void Page_Unload(object sender, EventArgs e) { myReport.Dispose(); }
重点:经过一段时间运行,问题又来了。发现资源释放了,点击报表打印按钮就彻底不行了。
经过对页面生命周期分析后,将ReportDocument资源释放放在Page_Disposed中即可完美解决,不能打印问题。
protected void Page_Disposed(object sender, EventArgs e) { myReport.Dispose(); }
Page_Unload:页面从内存中卸载
Page_Disposed:Page对象从内存中释放掉。这是Page对象生命周期中的最后一个事件
所以明显就可以对比处结果。