Crystal Reports - низкая производительность в ReportDocument.Load - PullRequest
2 голосов
/ 25 января 2011

У нас возникли некоторые проблемы с производительностью в нашем приложении, где Crystal Reports (XI) размещается в WCF-сервисе. С помощью профилировщика производительности мы смогли выяснить, что вызов ReportDocument.Load занимает более 10 секунд. Если копать глубже, то наиболее проблемный момент - метод ReportClientDocumentClass.Open, который занимает целых 10 секунд.

Мы вызываем метод Load следующим образом:

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

Файл отчета размещен на том же сервере, что и служба.

«Трассировка стека» для ReportDocument.Load выглядит следующим образом:

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

И, как я упоминал выше, вызов ReportClientDocumentClass.Open является "зависшим". Любые идеи, которые могут вызвать это?

Ответы [ 2 ]

2 голосов
/ 28 февраля 2011

Первоначальная проблема была точно определена для принтеров. Вызов Open-method пытается подключиться к принтеру, который использовался при разработке отчета. Когда отчет был развернут, принтер больше не был доступен, но Crystal потребовалось около 15 секунд, чтобы заметить это.

Открытие отчета и настройка его на отсутствие принтера позволили устранить эту проблему с производительностью.

0 голосов
/ 25 января 2011

Я заметил, что в службе WCF я профилирую, что вызов Client > WCF > Service имеет следующие характеристики производительности:

  1. первый вызов сервиса новым экземпляром клиента:
    1. после не запуска клиента в течение 1-2 минут: ~ 12-15 секунд;
    2. после закрытия предыдущего экземпляра клиента: ~ 1,1 секунды;
    3. после перезапуска Windows: ~ 21 секунда;
  2. последующие вызовы службы существующим экземпляром клиента: ~ 0,1 секунды

под управлением Windows 2003 Server SP2 с 512 МБ ОЗУ.

Я не уверен, что в WCF вызывает это изменение производительности.

...