WinForms ReportViewer: медленный начальный рендеринг - PullRequest
6 голосов
/ 10 января 2009

ОБНОВЛЕНИЕ 2.4.2010 Да, это старый вопрос, но я подумал, что дам обновление. Итак, я снова работаю с ReportViewer, и он все еще медленно рендерится при начальной загрузке. Разница лишь в том, что база данных SQL находится на сервере отчетов.


ОБНОВЛЕНИЕ 3.16.2009

Я выполнил профилирование, и не SQL-сервер медленно отображает ReportViewer при первом вызове. При первом вызове элемент управления ReportViewer блокирует поток пользовательского интерфейса и делает программу не отвечающей. Примерно через 5 секунд ReportViewer разблокирует поток пользовательского интерфейса и отобразит «Отчет создается», а затем, наконец, отобразит отчет. Я знаю, что 5 секунд - это немного, но этого не должно быть. Мой коллега делает то же самое в своей программе, и ReportViewer немедленно отображает «Отчет генерируется» по любому запросу.

Единственное отличие состоит в том, что сервер отчетов находится на одном сервере, а данные - на другом сервере. Однако, когда я разрабатываю отчеты в SSRS, задержка не возникает.


UPDATE

Я заметил, что только первая загрузка ReportViewer занимает много времени; каждая последующая загрузка одного и того же или разных отчетов загружается быстро.


У меня есть WinForms ReportViewer, который я использую в Удаленном режиме обработки, который может занять до 30 секунд для рендеринга при вызове метода ReportViewer.RefreshReport (). Однако сам отчет работает быстро.

Это код для настройки моего ReportViewer:

rvReport.ProcessingMode = ProcessingMode.Remote
rvReport.ShowParameterPrompts = False
rvReport.ServerReport.ReportServerUrl = New Uri(_reportServerURL)
rvReport.ServerReport.ReportPath = _reportPath

Здесь ReportViewer может отображаться до 30 секунд:

rvReport.RefreshReport()

Ответы [ 11 ]

0 голосов
/ 17 марта 2009

Вот возможное решение вашей проблемы: Попробуйте получить доступ к первому отчету из Интернета, прежде чем получать доступ к любому отчету с помощью приложения.

Если проблема не появляется, вы можете создать приложение, которое будет «предварительно загружать» первый отчет, чтобы службы отчетов могли запускаться.

Я видел такое решение для некоторых демонстрационных приложений от Microsoft. Приложения, в которых используются службы Analysis Services и службы Reporting Services.

Удачи в противном случае

...