不同的打印性能时间

2020-08-31 08:27发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

我使用CR VS SP 25(与VB 2019一起使用)。 我们有一个ERP系统,可以在两种打印模式之间进行切换:

  • 旧RDC(CR XI R2)
  • 用于VS的CR-PrintToPrinter(P2P)
  • 用于VS的CR-PrintOutputcontroller(POC)

我使用带有Microsoft示例SQL数据库AdventureWorks的CR 2016 SP 7创建了一个基本示例报告,可以在这里下载: https://www.microsoft.com/zh-cn/download/details.aspx?id=49502 (在这里用于 SQL 2016,我正在使用SQL 2014,但应该不会有问题。

示例报告放在"人"表上,并带有过滤器,该报告约有20页。
@Don:我可以通过电子邮件将报告发送给您。 您可以使用测试程序来测量时间:

现在次数(直到程序返回 控件的那一刻):

  • 旧RDC:
    -使用" CRAXDRT.Report.PrintOut()" => 2"(秒)直接打印
    -通过查看器中的"打印"按钮:少于1"
  • P2P:
    -使用" CrystalReports.Engine.ReportDocument.PrintToPrinter()"直接打印=> 4"
    -查看器中的打印按钮:11"(!!)
  • POC:
    -使用" mainReport.ReportClientDocument.PrintOutputController.PrintReport()" => 11"(!!)直接打印
    -查看器中的打印按钮:11"(!!)

这是同一份报告,位于同一台打印机上(出于测试目的,Ricoh MP 2553 PCL 5e->我暂停了打印机)。

有什么解释吗?

此致

帕特里克

(80.4 kB)

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

我使用CR VS SP 25(与VB 2019一起使用)。 我们有一个ERP系统,可以在两种打印模式之间进行切换:

  • 旧RDC(CR XI R2)
  • 用于VS的CR-PrintToPrinter(P2P)
  • 用于VS的CR-PrintOutputcontroller(POC)

我使用带有Microsoft示例SQL数据库AdventureWorks的CR 2016 SP 7创建了一个基本示例报告,可以在这里下载: https://www.microsoft.com/zh-cn/download/details.aspx?id=49502 (在这里用于 SQL 2016,我正在使用SQL 2014,但应该不会有问题。

示例报告放在"人"表上,并带有过滤器,该报告约有20页。
@Don:我可以通过电子邮件将报告发送给您。 您可以使用测试程序来测量时间:

现在次数(直到程序返回 控件的那一刻):

  • 旧RDC:
    -使用" CRAXDRT.Report.PrintOut()" => 2"(秒)直接打印
    -通过查看器中的"打印"按钮:少于1"
  • P2P:
    -使用" CrystalReports.Engine.ReportDocument.PrintToPrinter()"直接打印=> 4"
    -查看器中的打印按钮:11"(!!)
  • POC:
    -使用" mainReport.ReportClientDocument.PrintOutputController.PrintReport()" => 11"(!!)直接打印
    -查看器中的打印按钮:11"(!!)

这是同一份报告,位于同一台打印机上(出于测试目的,Ricoh MP 2553 PCL 5e->我暂停了打印机)。

有什么解释吗?

此致

帕特里克

(80.4 kB)
付费偷看设置
发送
7条回答
shere_lin
1楼 · 2020-08-31 09:20.采纳回答

不再支持旧的RDC组件,并且我不认为没有可用的许可证,它们的基础与.NET组件的CR完全不同。 此外,ReportDocument和ReportClientDocument彼此之间也有很大不同。 有了所有这些差异,我并不感到时代不同。

而且,如果您第二次运行它会发生什么? 第一次使用ReportDocument或ReportClientDocument运行任何程序时,程序集都必须加载到内存中,这可能需要一些时间。 再次运行相同的代码不会产生此开销。

-Dell

huskylover
2楼-- · 2020-08-31 09:06

数字听起来很正确。

RDC包裹在crpe32上 .dll或内嵌有crpe32的inproc版本。

P2P使用基本的Windows Framework打印机集合:

System.Drawing.Printing.PrintDocument pDoc = new System.Drawing。 Printing.PrintDocument();
System.Drawing.Printing.PageSettings pPage = new PageSettings();

输出由crpe32.dll处理,因此它位于...之上。

POC使用相同的Windows API,但是在其顶部还包裹了RAS,因此在呈现报告时它会进行更多处理。

戴尔指出,第一个 由于CR仅在需要时才加载程序集,然后加载/读取打印机驱动程序属性,因此时间总是较慢。

提高性能的方法是将所有默认值保存在RPT文件中 ,默认值,数据库信息,打印机信息(单击"打印"按钮,然后设置 除默认设置和保存外),信息将保存在RPT文件中,然后可以使用通用P2P API。 多数情况下可以使用,但是由于P2P是基本的并且使用默认打印机,因此可能并不总是使用它。

另一个选择是更改应用程序并使用Threading,STA模型,为每个STA创建一个新线程。 报告对象,那么如果其中一个失败,则可以终止该过程,而另一个对象正在工作时,则可以开始处理另一份报告。 您仍然可以进行延迟处理,但是在处理过程中不会使应用处于混乱状态(不响应)。

Don

愤怒的猪头君
3楼-- · 2020-08-31 09:07

谢谢您的回答 ,戴尔和唐。

由于我们使用Crystal Reports已有20多年了,因此我知道不再支持RDC。 但是,由于RDC仍然运行非常稳定,最重要的是速度更快,因此我们的许多客户都不喜欢P2P甚至POC。 如果您有一辆快车,就不想买一辆慢车。

因此,我们试图找到一种解决方案。 我们已经实现了一个缓存的报告系统,其中所有报告都保存了所有必需的默认值。 为了回答戴尔,测量的时间不是第一次,而是每再发生一次。

@Don:您是否尝试过我通过邮件发送给您的报告? 你能重现我的时代吗?

对于研发而言,发明POC之类的新技术总是很酷的-但是它们还具有强大的性能吗? 简而言之,如果您可以复制时间,请询问R&D是否可以加快POC打印。

请不要忽略我的样本只是一个20页的报告的事实。 我们的客户有时会连续打印几百份报告-您可以想象会花费多少时间...另一方面,线程化的想法还不错-尽管我们已经在某些项目中实现了这一点,但是线程化不会 缩短纸张从打印机中出来的等待时间。

Patrick

灬番茄
4楼-- · 2020-08-31 09:22

嗨Patrick,

人们已经报告了几年的相同时间...正如我们指出的那样,我们根本无法加快速度。

不,我没有测试它,我没有该数据库。

我确实打开了报告,发现您仍在使用旧的MDAC SQLOLEDB驱动程序。

将其升级到MS SQL Native 11客户端,然后重试。

您的报告还没有保存打印机,这意味着您从未单击过文件,页面设置并将格式设置为真实打印机。 如果不使用真正的打印机,则使用usp10.dll和gdiplus.dll来格式化报告格式,格式引擎需要花费一些时间才能调整为真正的打印机。

有关打印的更多信息,请参见此KBA以及"打印"博客的链接:

https://launchpad.support.sap.com/#/notes/2163438

Don

派大星 ヾ
5楼-- · 2020-08-31 09:04

还有任何大师吗?

SKY徐
6楼-- · 2020-08-31 09:11

我很久以前就与R&D讨论过了,仅此而已 他们可以做到,这只是运行时的本质。

SAP小黑
7楼-- · 2020-08-31 09:19

嗨,唐,

您还使用我的报告检查了我的时间吗? 您获得了相同的效果结果吗?

帕特里克

一周热门 更多>