我们正在运行报告Web应用程序,允许用户选择几个字段,并根据所选字段生成晶体报告。为最复杂的报告生成的SQL将返回< 5秒,然而它需要报告和平均3分钟运行,有时更长导致超时。我们正在运行VS2010。报告基本上是开箱即用的,没有真正的操作或计算,只是以一种很好的格式显示数据。有没有什么我们可以尝试加快速度,预加载虚拟报告加载dll,一些黑客让水晶运行得更快,什么?
编辑:添加代码以显示数据绑定
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
}
答案 0 :(得分:2)
这可能有点轻率,但可能考虑不使用水晶报告......我们最近遇到了一些麻烦(内存错误是一个),我们已经转移到其他选项并且是很开心......
答案 1 :(得分:0)
这就是我要做的事情:
从用户获得字段选择时开始计时,一直到显示报告时。查看处理时间的上升位置。
当您查看时钟时,可能会出现各种情况:
如果Crystal Reports需要时间来填写报告,请检查您是如何填写报告的。如果您将报告字段直接链接到数据表,CR可能会花时间查找数据。我建议使用动态列(Field1,Field2,.. FieldN)创建一个新表(t_rpt),并将报表模板指向该表。我不知道你是否已经这样做了。
如果您花时间查找数据本身,我建议创建一个表格视图。即使内存耗尽,这也会使您的查询变得快速,并且您可以在完成后删除视图。
如果不是上述情况,请告诉我们您的时钟节目。
答案 2 :(得分:0)
在加载任何大量数据方面,您总是希望使用存储过程。
除此之外,您将在第一次加载Crystal DLL时看到运行报告的延迟。是的,你可以像你提到的那样预加载它们,这对一些人有帮助。