ASP.NET медленнее, чем консольное приложение - PullRequest
1 голос
/ 29 августа 2011

У меня есть приложение, которое берет кучу данных и обрабатывает их в серии циклов, которые занимают очень много времени. Готовый результат должен быть доступен через HTTP API. Я решил создать основную библиотеку, которая выполняет обработку, и приложение ASP.NET, которое запускает процессы в новых потоках. Базовая библиотека порождает 4 потока, которые обрабатывают объекты из очередей.

Однако это оказывается значительно медленнее, чем просто выполнение обработки в простом консольном приложении. В моем консольном приложении обработка занимает около 13-20 секунд за цикл, в среднем около 17 секунд, в моем приложении ASP.NET обработка занимает 13-350 (да триста пятьдесят) секунд, в среднем около 45 секунд. Время для каждого цикла сильно отличается в моем приложении ASP.NET.

Есть ли какие-либо очевидные потери производительности при использовании инфраструктуры ASP.NET, которые я пропустил? Я отключил утилизацию, и при обработке обрабатывается несколько запросов, если таковые имеются. Это как-то связано с многопоточностью или сборкой мусора? Я подозреваю последнее, так как большинство циклов работают достаточно быстро, в то время как некоторые работают очень медленно, что разрушает мое общее время обработки.

Должен ли я отойти от ASP.NET и попробовать вместо этого реализовать в моем консольном приложении HTTP-прослушиватель или перестроить его в службу Windows? Есть идеи?

1 Ответ

3 голосов
/ 29 августа 2011

Приложение ASP.NET, очевидно, всегда будет работать медленнее, чем консольное приложение.

Причины:

  1. Издержки протокола HTTP.

  2. Большое использование памяти в ASP.NET Framework DLL

  3. Ограниченные потоки, управляемые самим ASP.NET.

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

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