在代码中从.rdlc导出PDF时,如何提高LocalReport.Render方法的性能?

时间:2011-10-24 08:32:28

标签: c# pdf rendering reportviewer localreport

我希望在代码级别呈现大型非图形报告(数千页),省略从{.dlc文件中阻塞浏览器的ReportViewer控件。当我测试呈现有些2000页的报告时,Microsoft.Reporting.WebForms.LocalReport.Render方法需要大约半小时才能完成,这被认为是糟糕的用户体验。

是否有任何技巧或替代解决方案来提高渲染性能:在代码中,重新设计.rdlc文件或其他地方,例如,只是增加硬件?

示例代码:

LocalReport localReport = new LocalReport();
localReport.ReportPath = Server.MapPath("~/report.rdlc");

SetDataSources(ref localReport);

string reportType = "PDF";
string mimeType;
string encoding;
string fileNameExtension;

string deviceInfo =
"<DeviceInfo>" +
"  <OutputFormat>PDF</OutputFormat>" +
"  <PageWidth>8.5in</PageWidth>" +
"  <PageHeight>11in</PageHeight>" +
"  <MarginTop>0in</MarginTop>" +
"  <MarginLeft>0in</MarginLeft>" +
"  <MarginRight>0in</MarginRight>" +
"  <MarginBottom>0in</MarginBottom>" +
"</DeviceInfo>";
}

Warning[] warnings;
string[] streams;
byte[] renderedBytes;

//Render the report
renderedBytes = localReport.Render(
            reportType,
            deviceInfo,
            out mimeType,
            out encoding,
            out fileNameExtension,
            out streams,
            out warnings);

非常感谢任何帮助,提前谢谢!

5 个答案:

答案 0 :(得分:0)

返回datatable作为数据源的运行速度比对象列表快得多

答案 1 :(得分:0)

生成大型PDF文件需要内存,但如果需要,可以使用优化内存使用的技巧:

  1. 将报告生成为单独的PDF文档,最多5-10页(使用特定的PDF库,如免费iTextSharpPDF File Writer
  2. 然后将所有这些PDF文件合并为一个单独的大型PDF文档。
  3. 当您控制报告生成的进度时,此技术也很有用。

答案 2 :(得分:0)

删除SSRS报告中的所有表达式。 任何条件格式化,着色和交替行,这都会大大减少您的下载时间。

答案 3 :(得分:0)

<trust legacyCasModel="true" level="Full"/> <system.web>内的web.config标记内放置variable_p : process(clk) variable var : integer; begin if rising_edge(clk) then var := 0; for i in 0 to 7 loop if some_vector(i) = '1' then var := var + 1; other_vector(var) <= '1'; end if; end loop; end if; 为我做了。 More details here

答案 4 :(得分:0)

经过我 5 个月的调查,没有办法以可接受的速度水平提高 RDLC 的性能。 RDLC 是为简单的报告创建的,例如收据和发票。如果报表页数大于 100 且没有任何内部表达式,或大于 50 页具有动态内部表达式,则使用 html 是可接受的加载和呈现速度的最佳选择。