我正在对JasperReports和Birt报告引擎进行评估。
我在这两个工具中设计了一个简单的报表,我将20个值作为参数,并将报表中SQL选择中的6个其他值作为详细关系填充(这意味着我有许多行)。
我用Java和PDF导出编写了两个报告的创建程序(我认为这两个报告引擎都使用iText)
我测量了每一份报告所需的时间。这些报告是完全相同的,它们是从同一个过程中运行的。
该报告运行了10组值。所以我测量了10份报告中每一份的时间。结果是:
打印Jasper报告了10个值的。测量所需时间。110 109 141 125 110 125 110 110 109贾斯珀完成!
打印Birt报告10个值的。测量所需时间。1063 1017 1095 1079 1079 1079 1048 1064 1079 1080 Birt完成!
数字是在密室里。
有没有可能贾斯珀比伯特快十倍。我的代码是不是做错了什么,让Birt的事情慢下来了?我正在张贴我在每一种情况下使用的代码:
JasperReports:
// Export Jasper report
long startTime = System.currentTimeMillis();
JasperPrint myJasperPrint;
JRExporter myJRExporter = new net.sf.jasperreports.engine.export.JRPdfExporter();
try {
myJRExporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, "C:/Workspace/myProject/jasperReport" + reportNr + ".pdf");
myJasperPrint = JasperFillManager.fillReport("C:/Workspace/myProject/reports/testReport.jasper", jasperParametersMap, connection);
myJRExporter.setParameter(JRExporterParameter.JASPER_PRINT, myJasperPrint);
myJRExporter.exportReport();
return (System.currentTimeMillis() - startTime);
} catch (JRException ex) {
System.out.println(ex);
}Birt:
// Export Birt report
String format = HTMLRenderOption.OUTPUT_FORMAT_PDF;
EngineConfig config = new EngineConfig();
config.setEngineHome("C:\\Tools\\Eclipse\\plugins\\org.eclipse.birt.report.viewer_4.2.2.v201302041142\\birt");
HTMLEmitterConfig hc = new HTMLEmitterConfig();
HTMLCompleteImageHandler imageHandler = new HTMLCompleteImageHandler();
hc.setImageHandler(imageHandler);
config.setEmitterConfiguration(HTMLRenderOption.OUTPUT_FORMAT_HTML, hc);
ReportEngine engine = new ReportEngine(config);
IReportRunnable report = null;
String reportFilepath = "C:/Workspace/EntireJ/Besuchblatt/reports/new_report.rptdesign";
HTMLRenderOption options = new HTMLRenderOption();
options.setOutputFormat(format);
options.setOutputFileName("C:/Workspace/myProject/birtReport" + reportNr + ".pdf");
long startTime = System.currentTimeMillis();
try {
report = engine.openReportDesign(reportFilepath);
}
catch (EngineException e) {
System.err.println("Report " + reportFilepath + " not found!\n");
engine.destroy( );
return;
}
IRunAndRenderTask task = engine.createRunAndRenderTask(report);
task.setRenderOption(options);
task.setParameterValues(parametersMap);
try {
task.run();
return (System.currentTimeMillis() - startTime);
}
catch ( EngineException e1 ) {
System.err.println( "Report " + reportFilepath + " run failed.\n");
System.err.println( e1.toString( ) );
}
engine.destroy( );在我的例子中,有优化Birt性能的方法吗?
发布于 2013-10-01 09:29:02
在阅读了类似的讨论并完成了我的评估后,我认为在大多数情况下,Birt实际上比Jasper慢得多。为了使它更快,有些事情要做,但它们目前需要花费时间,而Jasper已经为基本的报告需求提供了良好的性能。我不知道它是否能比Jasper表现得更好,如果我设置得更好,或者优化了代码或报告模板,但在大多数类似的情况下,我在互联网上看到的讨论中,人们只是接受这种性能,并保持它的原样。下面是openMRS中一个未解决的问题的示例:https://tickets.openmrs.org/browse/BIRT-30
我希望下面的图片不会让我失望,但我真的很想贴出来。我还想把它寄给我的老板,作为评估的答案,但我不想:

发布于 2016-02-18 14:38:51
如果有人需要..。
4GB英特尔i3上的Java应用程序。Oracle数据库服务器。
jasper和birt的类似报告模板,向数据库发出20个请求和20个子请求(子报表)。
目标:在30个线程中生成6000个pdf文档(每个线程有200个文档)。
QA:

发布于 2013-07-29 08:54:31
我认为这是因为您在每次运行时创建并销毁了一个BIRT报告引擎。您应该只初始化一次报表引擎,并将其保存在类的静态变量中,供下一次报表代使用。这样会快得多
https://stackoverflow.com/questions/17919213
复制相似问题