我们的应用程序遇到了一些性能问题,其中Crystal Reports(XI)在WCF服务中托管。在性能探索器的帮助下,我们能够发现对ReportDocument.load的呼叫需要10秒钟。如果我们更深入地研究,最有问题的一点是在ReportClientDocumentClass.open方法中,这是整整10秒的时间。

我们将其称为这样的负载方法:

dim doc As ReportDocument = New CrystalDecisions.CrystalReports.Engine.ReportDocument
doc.Load("filename")

报告文件托管在同一家服务器上,而不是服务。

reportDocument.load的“堆栈跟踪”看起来像:

ReportDocument.Load
ReportClientDocumentWrapper.EnsureDocumentIsOpened
ReportClientDocumentWrapper.Open
ReportClientDocumentClass.Open

就像我上面提到的那样,对reportClientDocumentClass.open的呼吁是“悬挂”。有什么想法会导致这一点吗?

有帮助吗?

解决方案

最初的问题是指向打印机的。打开方法的电话试图连接到设计报告时使用的打印机。部署报告后,不再可用打印机,但是要注意这一点,需要大约15秒钟的时间才能注意到这一点。

打开报告并将其设置为不使用打印机修复了此特定的性能问题。

其他提示

我已经注意到WCF服务,我正在分析 Client > WCF > Service 呼叫具有以下性能特征:

  1. 首先通过客户的新实例致电服务:
    1. 在不运行客户1-2分钟之后:〜12-15秒;
    2. 关闭客户端的先前实例之后:〜1.1秒;
    3. 重新启动窗口后:〜21秒;
  2. 随后通过客户端的现有实例致电服务:〜0.1秒

使用512 MB RAM运行Windows 2003 Server SP2。

我不确定WCF中的什么是触发这种性能变化。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top