如何管理Crystal Report Dispose
本文关键字:Crystal Report Dispose 管理 何管理 | 更新日期: 2023-09-27 18:26:28
在Visual Studio 2012版本的Crystal Reports 13中,有一个阈值可以将并发报告(也包括子报告)限制为跨计算机的75个报告。这意味着,如果给定服务器上有5个web应用程序,则所有5个web程序中打开的所有报告都将计入75个报告限制。
错误以不同的方式表现出来,可能会导致以下错误"内存不足,无法进行操作"或"已达到系统管理员配置的最大报告处理作业限制"。
问题是报告没有被处理,它们继续累积,直到达到75的上限。为了解决这个问题,必须尽早处理这些报告。这听起来很简单,但并不像看上去那么简单。根据报告的生成方式,有两种情况:第一种是生成PDF或Excel电子表格,第二种是使用Crystal Report Viewer。每个场景都有不同的生命周期,我们在制定解决方案时需要考虑到这一点。
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);
}
已解决
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
(但这只是一个变通方法……)
我有一段旧代码,它为Crystal Reports自动生成主机WinForm窗体,在窗体关闭时,它有一行特定的行可以调用报表类上的Close()
,我很确定这是因为处理问题。那么这里可能是这样吗?
这可能也是针对旧版本的Crystal,所以可能是转移注意力。
我认为你应该试试
-rep.Close()
-rep.Dispose()
-CrystalReportViewer1.Dispose()
*my函数
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
关闭网页时
Protected Sub Page_Disposed(sender As Object, e As EventArgs) Handles
Me.Disposed
Me.close_and_dispose_report(rep)
End Sub