Ограничить использование ресурсов сервиса WCF - PullRequest
0 голосов
/ 16 августа 2010

Я занимаюсь разработкой веб-приложения, которое должно выполнять задачу, которая потребляет много ресурсов ЦП и памяти, а также может длиться несколько минут.Чтобы улучшить взаимодействие с пользователем, я также разработал службу Windows, в которой размещается служба WCF, которая выполняет эту «дорогостоящую» задачу и взаимодействует с веб-приложением с помощью msmq (очереди сообщений).

Это сработалоотлично, пока я не попытался выполнить нагрузочный тест ... Служба Windows начинает потреблять много ресурсов, кладя процессор на 100% и более 1 ГБ памяти.Я искал оптимизации и сделал много изменений в коде, и я думаю, что он очень эффективен, но задача просто требует много ресурсов.

Проблема в том, что пока WCFсервис работает, процессор загружается на 100%, а веб-приложение становится невероятно медленным!Я не против, если задача, выполняемая службой WCF, занимает пару минут больше, но я хочу, чтобы веб-приложение работало хорошо для пользователей.

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

Заранее спасибо.

Juan

Ответы [ 2 ]

0 голосов
/ 16 августа 2010

Полагаю, это проблема дизайна вашей службы Windows.Когда вы решаете разместить WCF в службе Windows, вы должны контролировать использование ресурсов = вы должны контролировать регулирование.Необходимо создать настраиваемый контроль над внутренней обработкой службы, чтобы можно было изменять нагрузку на основе доступных ресурсов.Если вы размещаете WCF в IIS, он уже обеспечивает такой контроль на уровне AppPool.

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

С уважением, Ладислав

0 голосов
/ 16 августа 2010

Простым решением было бы разместить службу WCF на другом компьютере.

Тот факт, что служба использует много ЦП, вероятно, не связан с тем, что вы используете WCF.

Есть несколько способов повысить производительность вашего веб-приложения:

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