在Visual Studio 2012版本的Crystal Reports 13中,有一个阈值可以限制并发报告,这也包括子报告,以及计算机上的75个报告。这意味着如果给定服务器上有5个Web应用程序,则所有5个Web应用程序中的所有已打开报告都会计入75报告限制。
错误以不同方式显示,可能导致以下错误“操作内存不足。”或“已达到系统管理员配置的最大报告处理作业限制”。
问题是报告没有处理,它们会继续累积,直到达到75限制。要解决此问题,必须尽早处理报告。这听起来很简单,但并不像看起来那么简单。根据报告的生成方式,有两种情况:第一种是生成PDF或Excel电子表格,第二种是使用Crystal Report Viewer。每个场景都有不同的生命周期,我们在制定解决方案时需要考虑这些生命周期。
答案 0 :(得分:1)
private bool disposed = false;
protected virtual void Dispose(bool disposing)
{
if (!this.disposed)
{
if (disposing)
{
context.Dispose(); //context means your crystal report document object.
}
}
this.disposed = true;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
答案 1 :(得分:1)
CurrentJobLimit
是并发报告的反击
此计数器管理不善,因此如果实际报告数较少,它也可以轻松增加。
我解决了问题以编程方式关闭Crystal Report文档。
protected void Page_Unload(object sender, EventArgs e)
{
CrystalReportViewer1.ReportSource.Close();
}
无论如何,注册表可以增加75的数量:
HKEY_LOCAL_MACHINE\SOFTWARE\CRYSTAL DECISIONS\10.0\REPORT APPLICATION SERVER\SERVER\PrintJobLimit
(但这只是一种解决方法......)
答案 2 :(得分:0)
我有一段旧代码自动生成Crystal Reports的主机WinForm表单,当表单关闭时,它有一个特定的行在报表类上调用Close()
,我是很确定那是因为处理问题。那么可能就是这种情况?
这可能也适用于旧款Crystal,所以可能是红鲱鱼。
答案 3 :(得分:0)
我想你应该试试
- rep.Close()
- rep.Dispose()
- CrystalReportViewer1.Dispose()
*我的功能
.panel {
height: 90%;
overflow: hidden;
}
.panel-heading {
height: 7%;
}
.panel-body {
height: 84%;
}
.panel-footer {
height: 9%;
}
导航到其他页面时
Protected Sub close_and_dispose_report(ByRef r As ReportDocument)
If Not r Is Nothing Then
r.Close()
r.Dispose()
CrystalReportViewer1.Dispose()
End If
End Sub
关闭网页时
Protected Sub Page_Unload(sender As Object, e As EventArgs) Handles Me.Unload
Me.close_and_dispose_report(rep)
End Sub