2008-11-14 4 views
8

Для корпоративных веб-приложений каждый бит подсчитывается.Рекомендации по производительности .NET для корпоративных веб-приложений

Какие рекомендации по производительности вы можете поделиться, чтобы помочь программистам более эффективно работать?

Чтобы запустить его:

  1. Используйте StringBuilders над строками, так как строки Mutable (они получают воссоздается каждый раз, когда вы изменить их).

  2. Избегайте использования наборов данных, поскольку они очень раздуты, вместо этого используйте SqlReader.

+0

Два момента, которые вы делаете, не являются специфическими для веб-приложений; они предназначены для любого приложения .NET. – flesh 2008-11-14 21:14:07

+1

Или они падают для любого приложения .NET - оба звучат, как будто они делают код менее читаемым, для меня. Я предпочел бы использовать строго типизированный DataSet (или подобную абстракцию), чем сырой SqlReader в любой день недели. – 2008-11-14 21:26:55

+0

Почему F # отмечена? Кроме того, re # 1 - строки IMMUTABLE по причине, которую вы указали. – 2008-11-14 21:40:44

ответ

0
  • Сделать хорошее использование объекта Cache для любых данных, которые не меняются очень часто, но привыкает много. Если вам нужно сохранить объекты кэша в соответствии с вашей базой данных, посмотрите на SqlCacheDependency.
  • Отключить ViewState везде, где это не требуется
3

Мы имеем дело с этим каждый день.

Мы делаем кеширование некоторых наборов данных, которые используются LOT. У нас довольно сложный механизм кэширования данных, который хорошо работает для нас.

Ленивая оценка почти обо всем.

Page- и частичное кэширование для пользователя управления

Мы не используем состояние сеанса у всех так мы отключили его в целом.

Настройте веб-сайты для работы в качестве известного пользователя с низким уровнем дохода.

Подключитесь к SQL Server как к одному и тому же низкоприбыльному пользователю. Это помогает с пулом соединений - все соединения по существу одинаковы.

NO ad-hoc SQL. Только хранится procs. Помогает с внедрением AND и SQL.

String.Concat() вместо строки + строка + ... или StringBuilder

1
  • доступ к базе данных как можно меньше
  • web.config доступа как можно
  • , как manwood говорит сделать хорошее использование кеша. Я мог бы также предложить, чтобы прочитать this очень хорошая статья о кэшировании режиме ядра
  • избежать блокировки, если вы можете
  • некоторые вещи (например, сортировка данных) может быть сделано на стороне клиента Nowdays (см Jquery)
  • here хорошая статья читать далее
24

Вопросы, поставленные в вопросе, - это микрооптимизации. Я не согласен с тем, что «каждый бит помогает», особенно если это происходит за счет удобочитаемости.

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

Так что мои советы:

  • Написать наиболее читаемый код, который вы можете
  • Не оптимизировать реализацию преждевременно - но думать о архитектурных вопросов производительности рано
  • Не вносить изменения от имени производительности до тех пор, пока у вас не будет жестких номеров, чтобы рассказать, улучшаете ли вы улучшения или нет.
  • Используйте профилировщик, чтобы помочь выявить узкие места

Все это не относится к веб-приложениям. Для веб-приложений (и на стороне сервера в целом):

  • Если вы действительно не знаете, что вам никогда не понадобится более одного сервера, убедитесь, что ваш код может масштабироваться горизонтально. Если вы можете позволить себе это сделать, начните с двумя серверами (или более), чтобы вы могли сгладить любые проблемы (сеансы и т. Д.) Раньше. Это также помогает при прокатных обновлениях и т. Д.

EDIT: Я вообще не обращался к базе данных. Kyle's answer хорошо на этом фронте. Убедитесь, что ваша база данных также может масштабироваться, если возможно :)

15

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

Coding ...

  • Вы выбрать дюжину столбцы, когда вам нужно только 2?
  • Захватываете ли вы все результаты, чтобы выполнить SUM?
  • Вы захватываете 1000 записей для отображения 10?
  • Вы снимаете сотню запросов на каждую страницу?

Database ...

  • У вас есть индексы по таблицам?
  • Являются ли они правильными индексами?
  • Вы взяли некоторые примеры запросов с помощью SQL Profiler и проверили их планы выполнения в Query Analyzer?
  • Вы видите ТАБЛИЦУ СКАНИРОВАНИЯ - ПЛОХО!
  • Вы видите, как INDEX SEEK - GOOD!

И если все остальное терпит неудачу, избавьтесь от этого дерьма и выбросьте больше аппаратных средств в проблему! :)

1

Помимо базы данных другая очень важная вещь, чтобы смотреть ...

размер страницы и количество запросов. Это, разумеется, само собой разумеется, но ASP.NET, как известно, плохо накладывает ваши страницы на кучу дерьма (увеличивая размер) и создавая миллион внешних файлов сценариев (количество запросов).

3

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

Мой список:

  1. Управление View State агрессивно
  2. UpdatePanel зло;) Сделать Juridicious использование
  3. Leverage JavaScript рамки, такие как JQuery
  4. смотреть ваш сервер туда и обратно
  5. Использование ASync страницы для операций с привязкой IO
  6. Кэширование на разных уровнях одинаково важно (уровень страницы, данные и т. д.)
  7. Использование Ajax для получения данных «по требованию» и кеш локально в виде XML (острова данных XML и т. Д.)
  8. Рассмотрите обработку асинхронных операций для длительных операций (вы можете использовать очереди заданий на основе базы данных и обрабатывать их через окна оказание услуг. Запрос Аякса может контролировать строку для завершения и обновления пользовательского интерфейса с использованием воздушных шаров)

Edit: [добавлено 6-8]

0

изучить журнал и свести к минимуму количество HTML, обслуживаемым по запросу. viewstate и раздутые сторонние элементы управления могут испортить ваше приложение. Например, мы долгое время использовали сетку от infragistics. очень очень способный, но даже в его лишенной форме он сделал страницы около 60-90k + много java-скрипта. это сильно ограничило количество запросов, которые мы могли сервер, даже на внутреннем гигабитном соединении.

0

По моему опыту, следующие сделать большую разницу:

  • Использование SQL Server Profiler для выявления медленных выполняющихся запросов. В частности, используйте шаблон настройки, чтобы узнать, пропустили ли вы какие-либо индексы.
  • Cache благоразумно (блок Application Caching)
  • Следите ViewState
  • Используйте Fiddler, чтобы проверить размер страницы и т.д.
1
  • сообщение обратно как можно реже. Используйте DHTML & JavaScript, чтобы манипулировать страницей, когда пользователи делают сложный набор критериев выбора. Не отправляйте сообщения, чтобы вносить изменения в страницу в ответ на каждую небольшую настройку пользователя.
  • Использование элементов управления ASP.NET является экономным, насколько это возможно. Используйте простой html как можно больше. Все элементы управления ASP.NET стоят за счет состояния представления и состояния управления. У простого HTML нет этих накладных расходов. Однажды я сделал веб-приложение для Citibank, которое состояло из одной главной страницы запроса. Эта страница была умеренно сложной. На нем был только один элемент управления ASP.NET. Это была кнопка, которая была отправлена ​​назад для изготовления пользовательского листа Excel, загруженного выбранными пользователем данными.
  • Используйте структуру MVC, а не ASP.NET. Состояние Viewstate и управления здесь не отображается, если вы используете Brail или NVelocity.
  • Запуск Ants profiler от программного обеспечения Redgate на вашем внутреннем коде. Удостоверьтесь, что ваше событие обратной передачи максимально короткое и сладкое.
  • Если страница выводит данные из таблицы, которая обновляется один раз каждые 24 часа или один раз в неделю, не следует писать страницу ASP.NET comon для запроса данных каждый раз, когда пользователь делает запрос. Если данные являются статическими, сделайте страницу статичной. Вы можете создавать статические страницы на основе планировщика NT, используя XML-литералы & Linq to XML classes. Это самая большая скорость, которую я могу вам дать.
0

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

Scalable Apps with Asynchronous Programming in ASP.NET

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