Низкая производительность веб-службы .NET (при использовании MVC3 при переходе на WCF) - PullRequest
1 голос
/ 05 июня 2011

Я работаю над созданием веб-службы на основе .NET, где я передаю строку в качестве части URL-адреса и возвращаю другую строку. Возвращенная строка на самом деле JavaScript.

В настоящее время я использую MVC3 для этого сервиса, потому что требования казались очень простыми, и я не видел никакой причины использовать WCF. - Тем более, что я просто возвращаю JS, и мне не нужны никакие данные, упакованные в XML или что-либо еще.

Во время начального нагрузочного тестирования производительность службы казалась неприемлемой (пропускная способность около 85 в секунду). Поскольку я строю JavaScript на лету и возвращаю его, я решил посмотреть, какова будет производительность, если я просто верну несколько жестко закодированных JS. Это удвоило мою производительность (пропускная способность около 175 в секунду). Ничто не сломало землю, но это было примерно в два раза быстрее. Я ожидал этого.

Затем, ради интереса, я решил посмотреть, как быстро будет загружаться тест, просто извлекая реальные сгенерированные файлы JS из IIS. Это взорвало мой разум. Это было примерно в 30 раз быстрее (пропускная способность 2200 в секунду)! Я ожидал, что получение плоских файлов будет намного быстрее, чем генерация JS, а затем его возврат, но это намного быстрее, мне интересно, очень ли MVC3 работает очень медленно или есть проблема с сервером.

Если я переключусь на WCF, увижу ли я значительное увеличение пропускной способности? Позволит ли WCF мне возвращать строку JS (или он ожидает, что каждый тег будет заключен в XML)? Если мне нужно очень быстрое время отклика, должен ли я использовать что-то кроме WCF или MVC3?

Спасибо

Как я уже говорил ранее,

Ответы [ 4 ]

1 голос
/ 05 июня 2011

Если сгенерированный JavaScript зависит только от нескольких переменных и часто одинаков, вы можете использовать атрибут OutputCache в методе действия.Свойство VaryByParam позволит вам иметь несколько кэшированных копий для разных значений переменных.

0 голосов
/ 05 июня 2011

Вы жалуетесь на производительность, но не показываете, как вы тестировали производительность и как вы строили свой объект JSON.Для тестирования производительности помните, что ASP.NET (как WebForms, так и MVC) имеет синхронизированную обработку, когда включено состояние сеанса.Это означает, что только один запрос от данного пользовательского сеанса может быть обработан за один раз для обеспечения согласованности состояния сеанса.Проверьте, увеличится ли производительность, если вы отключите состояние сеанса для контроллера.

Обычно WCF не увеличивает пропускную способность.Возможно, он имеет еще более сложную обработку, и если вы хотите использовать его для обслуживания JSON, вы, скорее всего, в конечном итоге разрешите AspNetCompatibility, который, в свою очередь, будет использовать тот же конвейер обработки, который вы используете в данный момент + некоторые дополнительные материалы WCF.1006 *

Также следует помнить, что статические файлы кэшируются.

0 голосов
/ 05 июня 2011

Может ли быть так, что предварительно сгенерированные файлы JS кэшируются на стороне клиента, поэтому производительность значительно улучшается?

0 голосов
/ 05 июня 2011

Извлечение файлов из iis - это совершенно другая операция, которая позволяет значительно повысить производительность из-за кэширования файлов на сервере и не требует обработки.Я не думаю, что ваш wcf будет таким другим (да, вы можете вернуть JavaScript), но это был бы простой перф тест.

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