Язык: C#
Инструменты: Visual Studio 2010
NET: .NET 4.0 и ASP.NET WebForms
ReportViewer v.10ASP.NET с ReportViewer, LocalProcessing и DataSets
Я новый веб разработчик, обычно парень на рабочем столе, и у меня нет наставника или гида по изучению этого материала, поэтому я подумал, что попрошу StackOverflow.
Проблема: ReportViewer имеет длительную паузу/задержку перед началом рендеринга на экран. Я пытаюсь выяснить, понимаю ли я стек процесса.
Я извлекаю большой DataSet, около 90 000 элементов в одной таблице, из Oracle SQL. Запрос создается через пользовательский объект и добавляет параметры. Я думаю, что это оболочка для упрощения связи ODBC или чего-то еще. Это может быть узкое место номер один. Вы можете спросить, RagingCain, почему бы вам просто не взглянуть на него? Дело в том, что существует несколько сотен тысяч строк кода, которые ни я, ни моя команда не написаны. По-видимому, предыдущая команда платила за линию/час, а весь проект - спагетти. Я просто не могу потратить свое очень мало времени на глубокое погружение, если только я не могу лучше указать, что вы держите вверх.
Запрос выполняется на общую сумму 11700 мс на стороне сервера. Первоначальный рендеринг ReportView составляет 300 ~ 500 мс, а затем 5000 мс, загружая данные. Нечетность возникает, когда между готовым запросом и начальным рендерингом ReportViewer требуется 10-20 секунд. Я, наконец, приурочил до и после создания извлечения DataSet и занимает от 11 до 12 секунд. Теперь, что от 11 до 12 секунд также включает время, необходимое для выполнения запроса. Это оставляет промежуток в 10-15 секунд, я не могу объяснить.
Я сначала подумал, что ReportViewer действует странно с UpdatePanels/AJAX. Во время начального развития, конечно, я имел дело с исключениями асинхронного/TimeOuts и исключениями OutOfMemory. Я работал над всеми этими проблемами и устранял их как возможные причины. Есть ноль необработанных или обработанных исключений, которые могут быть и виновниками, и JavaScript вообще отсутствует. Я выделил его для выполнения запроса, назначения DataSet, установки источника данных ReportViewer, привязки и обновления. Большой промежуток времени возникает после запроса и перед установкой источника данных ReportViewer.
Факт, который меня озадачил, состоял в том, что я предположил, что DataSets «заполняют» данными, а не переносятся на один большой объект, например, файл по сети. Я был под впечатлением, если запрос занял 7 секунд, DataSet занял примерно одно и то же время, которое нужно назначить. Представляется, однако, что задержка может примерно быть время, необходимым для передачи набора данных клиента
Рабочего поток (который затем используются в LocalProcessing.):
Client Инициирует Query Event
C# BACKEND на WebServer говорит PL/SQL-сервер, который процедура для выполнения
PL/SQL Server выполняет процедуру
C# BackEnd извлекает набор данных из SQL/Server
отправляет данные с веб-сервера клиенту
ReportViewer на клиенте Процессы DataSet
Правильно ли я понимаю?
Это передача данных, которую я вижу за кулисами?
Что можно сделать (на высоком уровне) для оптимизации процесса?
Имейте в виду, что LocalProcessing используется в ReportViewer для включения HyperLinks, о котором, как мне сказали, недоступно в RemoteProcessing.
ReportViewer Properties Set:
ProcessingMode = LocalProcessing
Гиперссылки = Enabled
AsynchRendering = True
SizeReportToPageContent = True
Насколько велика сгенерированная страница? –
43 строки, угадывая примерно 1 см на строку и 2,5 см для заголовка. – HouseCat
Это не то, что я имел в виду. Я имею в виду, когда вы сохраняете сгенерированную страницу на диск, сколько места она занимает? 1-5 Megs? –