如何管理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。每个场景都有不同的生命周期,我们在制定解决方案时需要考虑到这一点。

如何管理Crystal Report Dispose

       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