2009-04-30 4 views
2

У нас довольно сложная страница, которая динамически загружает пользовательские элементы управления (некоторые из них вложены). Это очень медленная страница.ASP.NET Производительность страницы

Не могли бы добавить элементы управления, динамически добавляя узкое место? Помогло бы нам добавить элемент управления в объект кэша .NET и не использовать LoadControl, если он уже существует в кеше?

Любые другие советы/стратегии по созданию страницы быстрее?

+8

Не угадывайте. Мера. –

ответ

3

Добавить Trace = "true" в вашу директиву @Page, и вы сможете увидеть, какие методы занимают самое длинное.

0

Я бы сомневался, что это действие динамически загружает элементы управления, которые замедляют его и больше поведение каждого элемента управления. Все ли они попали в БД? Я попытался бы оптимизировать производительность элементов управления (кэширование вызовов БД и т. Д.), Прежде чем пытаться оптимизировать их загрузку.

10

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

  • Установить SessionState на false или ReadOnly, когда это возможно. Обратите внимание, что метод настройки состояния сеанса отличается для ASPages, веб-сервисов и приложений.
  • Состояние сеанса хранения, если это возможно.
  • Установите EnableViewState на значение false, если это возможно.
  • Используйте кеширование, когда это возможно.
  • Используйте элементы управления HTML вместо серверных элементов управления, если вам не нужен доступ к элементу управления с сервера.
  • Избегайте круглых поездок (отправляя данные на сервер и перезагружая страницу), когда это возможно. Обратите внимание, что вам нужно всего лишь округлить, чтобы читать данные или записывать данные на сервер. Проверка и обратная связь могут выполняться на стороне клиента. Используйте свойство IsPostBack в Page_Load, чтобы избежать регенерации данных после обратной передачи.
  • Используйте класс StringBuilder для повторной конкатенации.
  • Использовать блоки try/catch только для непредвиденных ситуаций; не использовать их в качестве общих конструкций управления.
  • Используйте раннее связывание как можно больше. Другими словами, избегайте размышлений.
  • Избегайте неуправляемого кода, такого как COM.
  • Отключить режим отладки для доставки приложений.
  • Используйте хранимые процедуры для доступа к базе данных, а не строки SQL.
  • Используйте классы DataReader для чтения данных, а не DataSets.
  • Используйте наиболее ограничительные классы, такие как SqlDataReader, а не DbDataReader.
0

Я бы сделал некоторые профилирования на странице, чтобы узнать, где происходит истинное замедление. Обычно, по моему опыту, то, что, по моему мнению, может вызвать замедление в действительности, - это не самые медленные точки. Я нашел, что лучше всего профилировать мои приложения/страницы, когда что-то начинает работать медленно, что дает мне очень хорошую информацию о том, в каких областях я мог бы лучше всего ускориться, чтобы получить драматические улучшения. Вы можете обнаружить, что слишком много вызовов БД, или загрузка пользовательского контроля, или что-то еще, что вы не рассматривали.

1

Я был бы немного удивлен, если бы просто погрузка элементов управления динамически понесла значительную стоимость.Однако, если есть много элементов управления, и они глубоко вложены, ASP.NET иногда может быть довольно медленным, чтобы отобразить их в html. Очевидно, сделайте профилирование, поскольку другие предложили определить, где ваше узкое место действительно лежит.

Чтобы проверить, сложная страница, это размер отображаемого html. Благодаря большому количеству элементов управления сервером размер страницы может увеличиться до нескольких мегабайт на удивление быстро. Включение или настройка вашего сжатия HTTP может быть ответом, который вы ищете.

1

Первым шагом в исследовании проблем с производительностью является определение узкого места: это сетевой трафик (слишком много HTTP-запросов? Слишком много HTML идет по трубе?) Или процессор, связанный на сервере? или слишком много запросов к базе данных?

Во многих случаях это единственный размер страницы, который вызывает замедление. Если вы включаете в себя множество элементов управления на своей странице, тогда будет много HTML, поэтому, если вы создадите источник представления для конечного рендеринга и найдете 20000 строк HTML/javascript, то вполне вероятно, что замедление слишком велико данные передаются по сети.

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

Ключевые элементы, чтобы посмотреть на:

  • Управление размером VIEWSTATE
  • Удостоверяясь части страницы, которые скрыты устанавливаются .Visible = False (а не только стиль = "дисплей: нет; «)
  • централизации и консолидации Javascript
  • Минимизация количества HTTP запросов
1

контроль загрузки пользовательских динамически определенно не является причиной низкой производительности. одна вещь, которая, как правило, снижает производительность страницы ASPX, - это viewstate. Я рекомендую вывести viewstate из страницы [даже если вы включили его на некоторых элементах управления].

Сохраните полное viewstate в качестве переменной сеанса на сервере и передайте только идентификатор в поле viewstate. вы можете взглянуть на полную статью here, в статье также приведены показатели эффективности измерения.

0

Существует так много причин, по которым веб-страница может быть медленным исполнителем. Вам действительно нужно использовать некоторые инструменты, такие как Мастер производительности, чтобы начать сглаживание того, что происходит.

Наши последние проблемы с производительностью сводились к анонимным типам и linq. Это так легко убить производительность с этими двумя вещами из-за того, что все компиляции JIT продолжаются.

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