【问题标题】:Is there any way to speed up crystal reports generation?有什么方法可以加快水晶报告的生成速度?
【发布时间】:2011-05-25 12:21:52
【问题描述】:

我们正在运行一个报告 Web 应用程序,该应用程序允许用户选择几个字段,然后根据所选字段生成一个水晶报告。为最复杂的报告生成的 SQL 将在

编辑:添加代码以显示数据绑定

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        string strFile = Server.MapPath(@"AwardStatus.rpt");
        CrystalReportSource1.Report.FileName = strFile;
        DataTable main = Main();
        CrystalReportSource1.ReportDocument.SetDataSource(main);

        CrystalReportViewer1.HasCrystalLogo = false;

        CrystalReportSource1.ReportDocument.ExportToHttpResponse(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat, Response, false, "pmperformance");

    }
}

private DataTable Main()
{
    Guid guidOffice = Office;
    CMS.Model.ReportsTableAdapters.ViewACTableAdapter rptAdapter = new CMS.Model.ReportsTableAdapters.ViewACTableAdapter();

    Reports.ViewAwardedContractsDataTable main = new Reports.ViewAwardedContractsDataTable();

    if (Office == new Guid())
    {
        IEnumerable<DataRow> data = rptAdapter.GetData().Where(d => UserPermissions.HasAccessToOrg(d.guidFromId, AuthenticatedUser.PersonID)).Select(d => d);
        foreach (var row in data)
        {
            main.ImportRow(row);
        }
    }
    else if (guidOffice != new Guid())
    {
        main = rptAdapter.GetDataByOffice(guidOffice);
    }
    else
    {
        main = new Reports.ViewACDataTable();
    }


    return main;
}

private Guid Office
{
    get
    {
        string strOffice = Request.QueryString["Office"];
        Guid guidOffice = BaseControl.ParseGuid(strOffice);

        if (!UserPermissions.HasAccessToOrg(guidOffice, AuthenticatedUser.PersonID))
        {
            return Guid.Empty;
        }
        else
        {

            return guidOffice;
        }
    }
}



protected void CrystalReportSource1_DataBinding(object sender, EventArgs e)
{
   //TODO
}

【问题讨论】:

  • 如何将数据绑定到报表?您可以发布生成报告的代码吗?
  • 如果您单步执行该代码,它是否会在任何时候挂起?看起来您正在对 DataTable 进行相当多的处理。
  • @Barry - 不,它似乎是相当快地逐步完成所有事情,没有真正的挂断需要提醒。
  • 报告文件有多大?是否与报告一起保存了大量数据,这可能会因文件大小而导致加载时间变长?

标签: asp.net crystal-reports


【解决方案1】:

这可能有点轻率,但可能考虑不使用水晶报告...我们最近遇到了一些麻烦(内存不足错误是一个),我们已经转向其他选项并且正在好开心……

【讨论】:

  • 如果我们无法消除其中的一些皱纹,我们会朝这个方向倾斜,你喜欢什么?
  • 我之前使用过 MS Reporting Services 并取得了一些成功,但在这种情况下,我们需要 PDF 并转向使用 iTextSharp 编写自己的 - 有点学习曲线,但输出完全符合要求且速度非常快.不再有水晶报告设计师感到沮丧。
  • 不知道有没有什么不同,但是微软对 CR 的支持水平似乎正在下降:blogs.msdn.com/b/vbteam/archive/2010/04/08/…
【解决方案2】:

我会这样做:

从您从用户那里获得字段选择的时间,一直到您显示报告的时间都设置时钟。查看您的处理时间在哪里增加。

当您查看时钟时,可能会出现各种情况:

  1. 如果 Crystal Reports 需要时间来填写报表,请检查您的填写方式。如果您将报告字段直接链接到数据表,CR 可能会花时间查找数据。我建议创建一个包含动态列(Field1、Field2、..FieldN)的新表(t_rpt)并将您的报告模板指向该表。我不知道你是否已经这样做了。

  2. 如果查找数据本身需要时间,我建议您创建一个表视图。尽管会占用大量内存,但这会让您快速查找,完成后您可以删除视图。

如果以上都不是,请告诉我们您的时钟显示的内容。

【讨论】:

    【解决方案3】:

    就加载任何大量数据而言,您总是希望使用存储过程。

    除此之外,您会在第一次加载 Crystal DLL 时看到运行报告的延迟。是的,您可以按您提到的那样预加载它们,这将有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-22
      • 2016-02-16
      • 2013-06-20
      • 1970-01-01
      • 2012-08-16
      • 1970-01-01
      • 2019-04-20
      相关资源
      最近更新 更多