有什么方法可以加快水晶报表的生成?

如何解决有什么方法可以加快水晶报表的生成?

| 我们正在运行一个报告Web应用程序,该应用程序允许用户选择一些字段,并根据所选字段生成水晶报表。为最复杂的报告生成sql将在不到5秒的时间内返回数​​据,但是运行该报告平均需要3分钟,有时会更长,从而导致超时。我们正在运行VS2010。这些报告基本上是开箱即用的,不需要进行任何实际的操作或计算,而只是以一种很好的格式显示数据。有什么我们可以尝试加快速度的方法预加载虚拟报告以加载dll,是否可以使Crystal更快运行的一些技巧? 编辑:添加代码显示数据绑定
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
}
    

解决方法

这可能有点轻率,但可能考虑不使用Crystal Reports ...最近我们在使用它们时遇到了很多麻烦(内存错误为其中之一),我们已经转而使用其他选项,对此我们感到非常高兴...     ,这是我要做的: 从您从用户那里获得字段选择的时间开始一直放置时钟,直到显示报告为止。查看处理时间在哪里增加。 当您查看时钟时,可能会出现各种情况: 如果Crystal Reports需要时间来填充报表,请检查您的填充方式。如果要将报表字段直接链接到数据表,CR可能会花一些时间查找数据。我建议使用动态列(Field1,Field2,.. FieldN)创建一个新表(t_rpt),并将您的报告模板指向该表。我不知道您是否已经在这样做。 如果您花时间查找数据本身,建议您创建表视图。即使占用了存储空间,也可以使查找快速,完成后就可以删除视图。 如果以上都不是,请告诉我们您的时钟显示什么。     ,在加载大量数据方面,您将始终希望使用存储过程。 除此之外,您将在第一次加载Crystal DLL时看到报表运行延迟。是的,您可以如前所述预加载它们,这将对您有所帮助。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?