Как Вы улучшаете свою производительность приложения MVC ASP.NET?
Ниже приведен список возможных источников улучшения:
Общие
Caching
CompiledQuery.Compile()
рекурсивно, избегая
повторной компиляции вашего запроса
выраженийOutputCacheAttribute
для сохранения ненужных действий и действий
выполненияActionResult
, если необходимоRouteName
для организации ваших маршрутов и затем используйте его для генерации
ссылок, и старайтесь не использовать метод ActionLink, основанный на дереве выражений. PartialViews
, избегайте его рендеринга xxxx раз: если вы
в конечном итоге вызываете одну и ту же часть 300 раз в одном и том же представлении, вероятно, что-то
что-то не так. Explanation And BenchmarksМаршрутизация
Используйте Url.RouteUrl("User", new { username = "joeuser" })
для указания маршрутов. ASP.NET MVC Perfomance by Rudi Benkovic
Кэшируйте разрешение маршрутов с помощью этого помощника UrlHelperCached
ASP.NET MVC Perfomance by Rudi Benkovic
Безопасность
DAL
Балансировка нагрузки
Используйте обратные прокси, чтобы распределить клиентскую нагрузку по экземплярам вашего приложения. (Stack Overflow использует HAProxy (MSDN).
Используйте Асинхронные контроллеры для реализации действий, которые зависят от обработки внешних ресурсов.
Клиентская сторона
Глобальная конфигурация
Если вы используете Razor, добавьте следующий код в ваш global.asax.cs, по умолчанию Asp.Net MVC рендерит с помощью aspx engine и razor engine. Здесь используется только RazorViewEngine.
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new RazorViewEngine());
Добавьте gzip (сжатие HTTP) и статический кэш (изображения, css, ...) в ваш web.config
Также, если вы используете NHibernate , вы можете включить и настроить кеш второго уровня для запросов и добавить к области и таймауту запросов.И есть классный профилировщик для EF , L2S и NHibernate - http://hibernatingrhinos.com/products/UberProf . Это поможет настроить ваши запросы.
Я бы порекомендовал вам взглянуть на состояние омерзительных таблиц:
select * from sys.dm_db_index_physical_stats(
db_id(), object_id('offending_table'), null, null, detailed);
Все, что вы ищете, это avg_fragmentation_in_percent, page_count, avg_page_space_used_in_percent, record_count и ghost_record_count. Такие сигналы, как высокая фрагментация, или большое количество записей-призраков, или низкий процент использования страниц, указывают на проблемы, и вещи могут быть немного улучшены, просто перестраивая индекс (т. Е. таблица) с нуля:
ALTER INDEX ALL ON offending_table REBUILD;
Я говорю это, учитывая, что вы не можете изменить таблицу или приложение. Если вы сможете изменить таблицу и приложение, совет, который вы уже получили, хороший совет (не используйте '*', не 'выберите с условием, используйте более новый тип varbinary (max) и т.д.).
Я бы также посмотрел на среднее время жизни страницы в счетчиках производительности, чтобы понять, хватает ли памяти в системе. Из вашего описания симптомов система выглядит как привязанная к IO, что заставляет меня думать, что происходит небольшое кэширование страниц, и большее количество оперативной памяти может помочь, а также более быстрый субсайт IO. В системе SQL 2008 я бы также предложил включить сжатие страниц, но в 2005 вы не можете.
И, просто чтобы быть уверенным, убедитесь, что запросы не заблокированы соперничеством из самого приложения, то есть. запрос не тратит 90% из этих 30 секунд на ожидание блокировки строки. Посмотрите на sys.dm_exec_requests во время выполнения запроса, см. wait_time, wait_type и wait_resource. Это PAGEIOLATCH_XX? Или это замок? Кроме того, как происходит sys.dm_os_wait_stats на сервере, каковы основные причины ожидания?
Вам не нужно создавать новое окно, вы передаете существующее окно в glXMakeCurrent ().
В текущей настройке необходимо:
. Однако это приводит к обратному использованию OpenGL для использования используемого визуального изображения. Это часто происходит потому, что визуал по умолчанию имеет разумные свойства GLX, но правильное приложение будет glXChooseVisual с нужными свойствами GLX, а затем использовать этот визуал для создания окна.
-121--4013019-Одна из очень простых задач заключается в асинхронном анализе при обращении к данным, которые вы хотите получить на странице. Будь то чтение из веб-службы, файла, базы данных или чего-то еще, используйте асинхронную модель как можно больше. Хотя это не обязательно поможет любой странице быть быстрее, это поможет вашему серверу работать лучше в целом.
При доступе к данным через LINQ полагайтесь на IQueryable ...
Почему стоит использовать AsQueryable() вместо List()?
... и использовать хороший паттерн Repository:
Loading Subrecords in the Repository Pattern
Это позволит оптимизировать доступ к данным, чтобы обеспечить загрузку только необходимых данных и только тогда, когда они нужны.
Это не потрясающая оптимизация, но я подумал, что брошу это там - Используйте CDN для jQuery и т. Д. .
Цитата самого ScottGu: Microsoft Ajax CDN позволяет значительно повысить производительность веб-форм ASP.NET и приложений ASP.NET MVC, использующих ASP.NET AJAX или jQuery. Сервис доступен бесплатно, не требует регистрации и может использоваться как в коммерческих, так и в некоммерческих целях.
Мы даже используем CDN для наших веб-частей в Moss, которые используют jQuery.
В дополнение ко всей этой замечательной информации об оптимизации приложения на стороне сервера я бы посоветовал вам взглянуть на YSlow. Это превосходный ресурс для улучшения производительности сайта на стороне клиента.
Это относится ко всем сайтам, а не только к ASP.NET MVC.
Code Climber и в этой записи блога подробно описаны способы увеличения числа приложений. представление.
Скомпилированный запрос повысит производительность вашего приложения, но он не имеет ничего общего с ASP.NET MVC. Это ускорит каждое приложение db, поэтому на самом деле речь идет не о MVC.
Основное предложение состоит в том, чтобы следовать Принципам REST, и следующие моменты связывают некоторые из этих принципов с ASP.NET MVC-фреймворком:
Это может показаться очевидным, но запустите свой сайт в режиме выпуска, а не в режиме отладки, в производственной среде, а также во время профилирования производительности. Режим выпуска намного быстрее. Режим отладки может скрыть проблемы с производительностью в вашем собственном коде.