GridView + ObjectDataSource проблема - одинаково плохая производительность для больших и маленьких наборов результатов - PullRequest
0 голосов
/ 04 мая 2009

Недавно меня вызвали для работы над старым устаревшим веб-приложением .NET. Производительность в последнее время значительно снизилась, так как объем данных в системе увеличился в четыре раза. Все было хорошо в течение предыдущих 2 лет.

Он использовал файл .xsd для общения с хранимой процедурой, которая достаточно сузила результаты (но без подкачки страниц), и передавал их в GridView через ObjectDataSource.

Часть, которую я не могу понять , это занимает около 7 секунд, чтобы загрузить 1 результат, 140 или 1200. Это заняло долю секунды для 0 приведенных случаев. (GridView обрабатывает нумерацию страниц)

Используя профилировщик SQL, мы увидели, что запрос занимает 6,9 секунды. Выполнение одного и того же запроса с теми же параметрами заняло 100 мс в SQL Management Studio. Я изменил параметры, чтобы убедиться, что это не просто кэшированный результат. Долгое время ожидания надежно воспроизводится.

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

(«Простой» дисплей GridView подходит для их нужд - не нужно контролировать HTML)

Ответы [ 2 ]

2 голосов
/ 04 мая 2009

У нас та же проблема:

  1. Проверьте актуальность вашей статистики:
    SELECT 
        ObjectName = Object_Name(ind.object_id),
        IndexName = ind.name,
        StatisticsDate = STATS_DATE(ind.object_id, ind.index_id)
    FROM SYS.INDEXES ind
    order by STATS_DATE(ind.object_id, ind.index_id) desc
  1. Удалить кеш сервера SQL:
    DBCC DROPCLEANBUFFERS
    DBCC FREEPROCCACHE
  1. Если ни одна из них не помогает, вы можете попытаться применить план запросов SSMS с помощью таких подсказок, как «внутреннее соединение LOOP» и «с (index = ...)».
1 голос
/ 04 мая 2009

Вы можете попробовать просмотреть план выполнения и тип параметров, которые отправляются из вашего приложения. Например, если ваше приложение передает nvarchar для сравнения со столбцом varchar, это может вызвать проблемы. http://weblogs.sqlteam.com/tarad/archive/2007/11/16/60408.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...