У меня есть приложение, которое берет кучу данных и обрабатывает их в серии циклов, которые занимают очень много времени. Готовый результат должен быть доступен через HTTP API. Я решил создать основную библиотеку, которая выполняет обработку, и приложение ASP.NET, которое запускает процессы в новых потоках. Базовая библиотека порождает 4 потока, которые обрабатывают объекты из очередей.
Однако это оказывается значительно медленнее, чем просто выполнение обработки в простом консольном приложении. В моем консольном приложении обработка занимает около 13-20 секунд за цикл, в среднем около 17 секунд, в моем приложении ASP.NET обработка занимает 13-350 (да триста пятьдесят) секунд, в среднем около 45 секунд. Время для каждого цикла сильно отличается в моем приложении ASP.NET.
Есть ли какие-либо очевидные потери производительности при использовании инфраструктуры ASP.NET, которые я пропустил? Я отключил утилизацию, и при обработке обрабатывается несколько запросов, если таковые имеются. Это как-то связано с многопоточностью или сборкой мусора? Я подозреваю последнее, так как большинство циклов работают достаточно быстро, в то время как некоторые работают очень медленно, что разрушает мое общее время обработки.
Должен ли я отойти от ASP.NET и попробовать вместо этого реализовать в моем консольном приложении HTTP-прослушиватель или перестроить его в службу Windows? Есть идеи?