Общие советы по оптимизации ASP.NET и C# в целом
- Использовать perfomance counters
https://msdn.microsoft.com/en-us/library/fxk122b4(v=vs.71).aspx
https://msdn.microsoft.com/en-us/library/3xxk09t8(v=vs.140).aspx
https://msdn.microsoft.com/en-us/library/system.diagnostics.performancecounter.aspx
Они позволят вам получить представление о некоторых параметрах сервера и среды приложения (память, процессор и т.д.). - Не использовать сессии
web.config -> sessionState -> mode = Off. - Использовать WCAT
Если вам нужно протестировать сайт в режиме стресс нагрузки – используйте WCAT. - Использовать MiniProfiler – http://miniprofiler.com/
Позволяет видеть скорость загрузки всех ресурсов, а также отслеживать все SQL запросы и их дубликаты. - Использовать using, где есть IDisposable
В этом случае память будет корректно очищаться (сборщик мусора сразу пометит занятую память как готовую к очистке при необходимости). - Правильная установка параметров в Web.config
На запущенном в эксплуатацию сайте задавать в Web.config параметры debug=false и trace enabled = false. - При работе со строками использовать StringBuilderи String.Compare
Использовать при работе со строками не конкатенацию строк, а StringBuilder. Для сравнения строк используйте String.Compare. - Использовать асинхронные операции
Используйте преимущества .NET 4.5 async constructs – асинхронные операции. - Устанавливать большое значение атрибуту CacheControlMaxAge
Всегда ставить атрибут CacheControlMaxAge в web.config равным большому числу (месяц, год). - Кеш данных – это последнее средство оптимизации, а не первое
Используйте кеш только в тех случаях, когда другие возможности оптимизации уже исчерпаны. - Избегать исключений (Exceptions)
Они очень медленно выполняются. Для этого делайте необходимые проверки (на неравенство null и т.д.). - Использовать paging не более 100
Если вы используете очень большой размер страницы – это сказывается на всех уровнях: дольше выполняется sql запрос, дольше идет обработка данных, дольше выводится в браузер, дольше идет обработка JS и CSS. Добивайтесь за счет фильтров, чтобы пользователю выводилась только нужная информация. - Для production версии сайта – release версия web.config
Всегда выкладывайте на production версию сайта release версию web.config с правильно настроенными параметрами. - Https использовать только для важных страниц
То есть на страницах надо ставить абсолютные ссылки ссылки с http, иначе они будут вызываться с https. - Создать “правильный” robots.txt
Pаскройте в robots.txt все, что можно, для поисковиков. Это уменьшит загрузку от поисковых роботов. - Хранить большие объекты с использованием pooling objects
Если объекты больше 85 кб – имеет смысл хранить их как набор объектов поменьше (pooling objects). - Анализировать проблемы с CPU
- При проблемах с CPU:
- – сначала проверяйте самый частые участки – особенно вложенные циклы;
- – используйте stopWatch для записи времени выполнения;
- – попробуйте инструмент Eqatec Profiler – для профилирования asp.net – http://stackoverflow.com/questions/378617/profiling-asp-net-websites-with-eqatec-profiler;
- – можно попробовать встроенный Perfomace Hub – http://blogs.msdn.com/b/visualstudioalm/archive/2014/02/28/new-cpu-usage-tool-in-the-performance-and-diagnostics-hub-in-visual-studio-2013.aspx;
- Тестировать наличие соединение пользователя с сервером
Проверяйте Response.IsClientConnected перед долгой операцией. - Инициализировать регулярные выражения вне цикла
При использовании Regex – определяйте его за пределами цикла.
Периодически мы проводим обучение и даем возможность стажировки на базе нашей платформы с управлением на SQL. Если вам это интересно, то пожалуйста посмотрите информацию об обучении/стажировке по SQL.