ОБНОВЛЕНИЕ 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()