如何管理Crystal Report Dispose?

问题描述 投票:3回答:4

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

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

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

c# asp.net-mvc crystal-reports
4个回答
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
投票

解决了

CurrentJobLimit是并发报告的反击。 此计数器管理不善,因此如果实际报告数较少,它也可以轻松增加。

我解决了以编程方式关闭Crystal Report Document的问题。

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

(但这只是一种解决方法....)


0
投票

我有一段旧代码自动生成Crystal Reports的主机WinForm表单,当表单关闭时,它有一个特定的行来调用报表类的Close(),我很确定这是因为处理的问题。那么可能就是这种情况?

这可能也适用于旧版Crystal,因此可能是红鲱鱼。


0
投票

我想你应该试试 - rep.Close() - rep.Dispose() - CrystalReportViewer1.Dispose()

*我的功能

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
© www.soinside.com 2019 - 2024. All rights reserved.