Служба Windows, использующая много ЦП (VB.NET) - PullRequest
0 голосов
/ 22 июля 2010

HI,

У нас есть устройство, которое отправляет TCP-пакеты на наш сервер один раз в день.У меня есть служба Windows, которая постоянно прослушивает эти пакеты.Код в службе в значительной степени является точной копией из примера MSDN ( Пример асинхронного сокета сервера ) - единственное отличие состоит в том, что наша реализация ничего не отправляет обратно.Он просто получает, обрабатывает данные и закрывает сокет.Служба только запускает поток, который немедленно обращается к указанному выше коду.

Проблема в том, что когда я захожу в диспетчер задач сервера, на котором он работает, служба, похоже, использует весь процессор (это говорит 99) все время.Об этом меня уведомили.Но я не понимаю, для чего используются эти циклы ЦП, поток просто блокируется на allDone.WaitOne () не так ли?

Я также создал консольное приложение с тем же кодом, и это прекрасно работает, то есть использует ЦП только во время обработки данных.Задача в каждом случае успешно завершается каждый раз, но реализация сервиса, на первый взгляд, кажется очень неэффективной.Что я могу здесь делать не так?

Спасибо.

1 Ответ

1 голос
/ 22 июля 2010

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

Он в значительной степени точно скажет вам, какая часть кода перегружает процессор.

Код, кстати.выглядит ужасно.Например, как использовать асинхронные кокетки, а не как хорошую архитектуру для сервера с несколькими подключениями.К сожалению, вам, возможно, придется переписать это.

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