2016-03-22 2 views
1

Язык: 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

+0

Насколько велика сгенерированная страница? –

+0

43 строки, угадывая примерно 1 см на строку и 2,5 см для заголовка. – HouseCat

+0

Это не то, что я имел в виду. Я имею в виду, когда вы сохраняете сгенерированную страницу на диск, сколько места она занимает? 1-5 Megs? –

ответ

0

Попробуйте включить tracing

Если трассировка включена, когда страница запрошенный ASP.NET добавляет на страницу серию таблиц, содержащих сведения о запросе о запросе страницы.

Сгенерированные таблицы включают подробные статистические данные о том, сколько времени потрачено на отображение событий на странице.

Чтобы увидеть трассировки с просмотром трассировки добавьте в ваш web.config:

<configuration> 
    <system.web> 
    <trace enabled="true" pageOutput="false" requestLimit="40" localOnly="false"/> 
    </system.web> 
</configuration> 

Затем доступ приложения обычно, и когда вы хотите, чтобы увидеть след Перейдите Trace.axd в корне вашего заявление.

Например, если URL-адрес приложения http://localhost/SampleApplication, перейдите к http://localhost/SampleApplication/trace.axd, чтобы просмотреть информацию о трассировке для этого приложения.

+0

В любом случае, чтобы вручную изменить местоположение вывода трассировки? Он встроен в некоторые элементы управления и трудно читается. – HouseCat

+0

Обновлен мой ответ ... –

+0

У меня есть след, исследующий, как вызвать обновление трассировки после запуска запроса. – HouseCat

 Смежные вопросы

  • Нет связанных вопросов^_^