Почему производительность вычислений значительно снижается при работе в потоке / задании Hangfire - PullRequest
0 голосов
/ 25 сентября 2019

У меня проблема с производительностью заданий Hangfire при переходе с традиционного хостинга на службу приложений Azure.Сервер Hangfire работает просто отлично с минимальной конфигурацией, но когда я сравниваю выполнение одного и того же кода в задании Hangfire с выполнением на контроллере MVC, я получаю разницу в производительности в 10 раз в пользу подхода с использованием контроллера.Все сделано в одном экземпляре сервера.Похоже, что поток Hangfire часто каким-то образом прерывается или регулируется.

Возможно, проблема связана с базой данных хранилища заданий, поскольку, как представляется, на производительность влияет незначительное увеличение / уменьшение базы данных SQL Azure (базовая)./ 5DTU <-> стандарт / 50DTU).

Увеличение / уменьшение службы приложений не имеет большого значения.Загрузка ЦП службы приложений никогда не превышает 50%.

Одновременно выполняется только одно задание.Существует только один экземпляр BackgroundJobServer.Я попытался ограничить количество выделенных рабочих потоков до 1.

Выполненный код, который испытывает снижение производительности, выполняет операции ввода-вывода файлов, итерации массивов, манипуляции с локальной структурой DataTable и т. Д.

Время выполнения 10.000 итераций блоков кода через вызов контроллера: 3348 мс.

Время выполнения 10.000 итераций блоков кода через вызов Hangfire в одном задании: 37045мс.

Оба в одном экземпляре приложения Azure.

...