Разработка и настройка для повышения производительности
Обновлен: Ноябрь 2007
В этом разделе обсуждаются параметры разработки, настройки, компиляции и выделения памяти, применяющиеся для повышения производительности веб-приложения.
Асинхронные модели программирования
ASP.NET поддерживает методики асинхронного программирования, которые позволяют помещать длительную задачу, такую как запрос базы данных, в поток, который действует отдельного от основного потока приложения. Можно использовать следующие методики:
КомпонентBackgroundWorker Класс BackgroundWorker в пространстве имен System.ComponentModel позволяет добавлять код для занимающей продолжительное время задачи к обработчику событий DoWork и вызывать метод RunWorkerAsync для запуска события DoWork. Вызывающий поток продолжит выполняться в нормальном режиме, в то время как рабочий метод перейдет в асинхронный режим. Когда метод завершен, компонент BackgroundWorker предупреждает вызывающий поток запуском события RunWorkerCompleted. Дополнительные сведения см. в разделе Компонент BackgroundWorker.
Асинхронное программирование, основанное на событиях Асинхронная модель на основе событий может принимать несколько форм в зависимости от сложности операций, поддерживаемых определенным классом. Простейшие классы могут содержать один метод имя_методаAsync и соответствующее событие имя_методаCompleted. Более сложные классы могут содержать несколько методов имя_методаAsync, каждый с соответствующим событием имя_методаCompleted, а также синхронные версии этих методов. Дополнительно классы могут поддерживать отмену, отчет о ходе выполнения и добавочные результаты для каждого асинхронного метода.
Асинхронный метод может поддерживать несколько ожидающих вызовов (несколько параллельных вызовов), что позволяет коду вызывать его любое количество раз до завершения прочих ожидающих операций. Для правильной обработки подобной ситуации может потребоваться отслеживание приложением завершение каждой операции.
Полное описание этой модели и ее реализации см. в Обзор асинхронной модели, основанной на событиях.
Асинхронное программирование с использованием интерфейса IAsyncResult Асинхронная операция, которая использует шаблон разработки IAsyncResult, реализуется как два метода с именами Beginимя_операции иEndимя_операции, которые начинают и заканчивают соответственно асинхронную операцию имя_операции. Beginимя_операции немедленно возвращает управление в вызывающий поток. Метод Endимя_операции завершает асинхронную операцию имя_операции. Время вызова метода Endимя_операции имеет значение, поскольку если операция имя_операции не завершена, то вызывающий поток блокируется. Дополнительные сведения см. в разделе Общие сведения об асинхронном программировании.
Clients callbacks В обратном вызове клиента функция клиентского сценария отправляет запрос веб-странице ASP.NET без затрат на обратную передачу.
Пример, использующий некоторые из этих методик, см. в Пример Event-based Asynchronous Pattern Technology.
Параметры компиляции и настройки
Способ компилирования и настройки приложения влияют на его производительность. Следующие рекомендации касаются способов обеспечения эффективной работы веб-приложений в целом.
Для большого веб-приложения используйте предварительную компиляцию.
Перезапускайте процессы при работе с веб-приложениями ASP.NET на Internet Information Services 5.0.
В случае необходимости регулируйте количество потоков рабочего процесса. Разрешите использование многопроцессорного веб-сервера на многопроцессорных компьютерах для приложений, активно использующих внешние ресурсы.
Отключите режим отладки.
Оптимизируйте файлы настройки веб-сервера и приложений под определенные нужды при помощи следующих методик:
Включайте проверку подлинности только в приложениях, которым она нужна.
Настройте параметры кодировки запросов и ответов.
Часто следует отключать атрибут AutoEventWireup для приложения.
Удалите неиспользуемые модули из конвейера обработки запросов.
Дополнительные сведения см. в разделе Общие сведения о производительности.
Параметры настройки кэширования
Чтобы повысить производительность приложения, можно настроить кэширование на следующих уровнях:
Приложение В файле Web.config приложения можно использовать элемент OutputCacheSection, чтобы управлять кэшированием для всего приложения. Используя элемент OutputCacheSettingsSection, можно установить профили кэша, которые затем могут быть применены к отдельным страницам.
Компьютер Те же параметры можно настроить в файле Machine.config.
Страница Можно настроить кэширование для отдельных страниц, используя профили кэша, которые были определены в файле конфигурации. Также можно настроить отдельные свойства кэша в директиве @ OutputCache или установкой атрибутов в определении класса страницы.
Элемент управления Можно настроить кэширование пользовательского элемента управления посредством установки директивы @ OutputCache в файле пользовательского элемента управления или установки атрибута PartialCachingAttribute в описании класса элемента управления.
Дополнительные сведения см. в разделе Настройка кэша в ASP.NET.
Повторное использование памяти в службах IIS 6.0
Если приложение содержит код, вызывающий проблемы, такой как приложение COM-взаимодействия с определенными утечками памяти, а изменение кода связано с определенными проблемами, то можно ограничить увеличение количества проблем посредством периодического повторного использования рабочего процесса, обслуживающего приложение. Повторное использование рабочего процесса заменяет экземпляр приложения в памяти. IIS 6.0 может автоматически повторно использовать рабочие процессы посредством перезапуска рабочего процесса или рабочих процессов, связанных с пулом приложений. Это позволяет приложениям беспрепятственно работать.
Поддержание состояния при повторном использовании
При наличии пула приложений, которые зависят от данных состояния, необходимо решить, использовать ли повторно рабочие процессы, связанные с этим пулом приложений. При повторном использовании рабочего процесса данные состояния для приложения, поддерживаемые в ходе процесса, теряются. В этом случае можно отказаться от повторного использования.
Решить проблему состояния при повторном использовании процессов можно посредством поддержания данных состояния вне рабочего процесса, например, в базе данных. Однако поддержание данных состояния вне процесса может повлиять на производительность сервера следующим образом:
Производительность уменьшается из-за издержек управления, которое необходимо для передачи данных между приложением и хранилищем данных.
Повторное использование очищает весь кэш данных процесса, поэтому кэш должен быть создан заново.
ASP.NET предоставляет параметр состояния сеанса сохранения с использованием службы состояния сеанса или базы данных SQL. Дополнительные сведения см. в разделе Режимы состояний сеанса.
Дополнительные сведения см. в руководстве Повторное использование рабочего процесса (IIS 6.0).
Служба образов в машинном коде
Служба образов в машинном коде — это служба Windows, которая создает и поддерживает образы в машинном коде, которые являются файлами, содержащими скомпилированный для конкретного процессора машинный код. Служба образов в машинном коде позволяет откладывать установку и обновление образов в машинном коде на периоды бездействия компьютера. Генератор образов в машинном коде (Ngen.exe) — это средство повышения быстродействия управляемых приложений. Ngen.exe создает образы в машинном коде и устанавливает их в кэш образов в машинном коде на локальном компьютере. Среда выполнения использует образы в машинном коде, находящиеся в кэше, вместо использования JIT-компилятора для компиляции исходной сборки.
Дополнительные сведения см. в статье NGen Revs Up Your Performance with Powerful New Features на веб-узле журнала MSDN.
Глобальный кэш сборок и рабочее множество
Рабочее множество процесса — это набор страниц памяти, в текущий момент доступных для процесса в физической памяти RAM. Эти страницы работают в фоновом режиме и могут использоваться приложением без запуска сбоя страницы. Отслеживать размер рабочего множества можно при помощи свойств PeakWorkingSet и WorkingSet. Уменьшить рабочее множество приложения можно посредством перевода сборок в глобальный кэш сборок. Этот параметр рекомендуется для сборок среднего уровня и совместно используемых сборок.