如何管理Crystal Report Dispose?

时间:2014-10-14 07:22:10

标签: c# asp.net-mvc crystal-reports

在Visual Studio 2012版本的Crystal Reports 13中,有一个阈值可以限制并发报告,这也包括子报告,以及计算机上的75个报告。这意味着如果给定服务器上有5个Web应用程序,则所有5个Web应用程序中的所有已打开报告都会计入75报告限制。

错误以不同方式显示,可能导致以下错误“操作内存不足。”或“已达到系统管理员配置的最大报告处理作业限制”。

问题是报告没有处理,它们会继续累积,直到达到75限制。要解决此问题,必须尽早处理报告。这听起来很简单,但并不像看起来那么简单。根据报告的生成方式,有两种情况:第一种是生成PDF或Excel电子表格,第二种是使用Crystal Report Viewer。每个场景都有不同的生命周期,我们在制定解决方案时需要考虑这些生命周期。

4 个答案:

答案 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