Низкая производительность веб-сайта ASP.NET на производственном сервере - PullRequest
2 голосов
/ 27 августа 2009

Моя проблема в том, что мой веб-сайт ASP.NET работает медленнее на моем производственном сервере, чем на моем сервере разработки.

Страница, которая выполняется за 120 мс в моей среде разработки, занимает 400 мс для выполнения на сервере. Я контролировал SQL-сервер с помощью профилировщика, и выполнение запроса на странице, занимающего 400 мс на сервере, занимает около 50 мс, поэтому я убедил себя, что моя проблема не связана с SQL-сервером.

Моя машина для разработки - Intel I7 с 6 ГБ ОЗУ, рабочий сервер - 2-ядерный четырехъядерный процессор AMD с 16 ГБ ОЗУ.

Ответы [ 9 ]

16 голосов
/ 27 августа 2009

Есть некоторые моменты, которые вы можете рассмотреть для повышения производительности вашего сайта.

  1. Set debug = false
  2. Отключите трассировку, пока не потребуется
  3. Выключите состояние сеанса, если не требуется. ASP.NET автоматически управляет состоянием сеанса. Однако, если вам не требуются сеансы, отключение этого поможет улучшить производительность
  4. Отключить ViewState как и когда не требуется.
  5. Избегайте частых обращений к базе данных
  6. Избегайте исключений. Исключения являются отличным способом обработки ошибок, возникающих в логике вашего приложения. Однако создание исключений является дорогостоящим ресурсом, и его следует избегать. Используйте конкретные исключения и используйте как можно меньше, чтобы избежать затрат ресурсов
  7. Используйте кэширование для повышения производительности вашего приложения.
  8. Используйте метод finally для уничтожения ресурсов

Edit: измерять эффективность вашего сайта с помощью этого сайта http://www.websiteoptimization.com/services/analyze/
http://www.websitepulse.com/

5 голосов
/ 27 августа 2009

Вы проверили, что debug = false в вашем файле web.config?

Является ли сервер 64-битным? Попробуйте создать выделенный пул приложений для вашего приложения и настроить пул приложений для работы в 32-битном классическом режиме. Делает что-нибудь разницу?

Вы предварительно скомпилировали класс или настроили его для компиляции во время выполнения?

2 голосов
/ 27 августа 2009

Установите Trace = "true" (<% @ Page Trace = "true" ...) на своей странице, и вы получите много полезной информации внизу страницы при ее загрузке в браузер. Вы будете точно знать, сколько времени потребуется для обработки запроса на сервере. Если время достаточно мало, проблема может быть в настройках IIS. Сравните их с теми, что есть в вашей среде разработки. </p>

1 голос
/ 28 августа 2009

Прочитав все предложения, и кажется, что ничего не работает, начните постепенно выводить код с вашего сайта и посмотрите, как это влияет на время. Удалите около 10 строк кода или HTML за раз и посмотрите, есть ли огромная разница.

В противном случае, это, вероятно, связано с IIS, и извините, я не гуру IIS.

1 голос
/ 27 августа 2009

Ваш SQL-сервер находится на другом сервере в работе, но локальный в разработке?

0 голосов
/ 03 сентября 2009

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

Я перешел с решения на базе AMD на решение на базе Intel (Xeon!), Получая диски с тактовой частотой 0,3 ГГц и быстрее.

Я также получил прирост производительности, вместо того, чтобы быть в 3 раза медленнее, чем моя машина для разработки, теперь он работает примерно на 0,75 медленнее - очевидно, все еще не та молниеносная скорость, на которую способна моя машина для разработки, но она приближается.

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

0 голосов
/ 27 августа 2009

Вам нужно уменьшить переменные.

Попробуйте устранить все различия между двумя средами, затем вносите изменения по одному, пока не выясните, что это такое.

Убедитесь, что файл web.config одинаков в обеих средах.
Убедитесь, что обе среды указывают на один и тот же сервер базы данных в третьем окне.
Убедитесь, что одна и та же версия IIS установлена ​​в обеих средах.
Убедитесь, что IIS настроен одинаково в обеих средах.
Запустите одни и те же тестовые данные в обеих средах.
и т.д ...

0 голосов
/ 27 августа 2009

Это единственный веб-сайт, который у вас есть на сервере? 16 ГБ - это довольно хорошая память, но если на этом же сервере будет много популярных веб-сайтов, они могут израсходовать ресурсы и процессорное время.

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

Вы проверяли индексы? Они все есть на сервере?

0 голосов
/ 27 августа 2009

Массивное состояние, вызывающее задержку передачи?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...