2010-07-22 2 views
0

HI,Служба Windows с использованием большого количества CPU (VB.NET)

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

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

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

Спасибо.

+1

Поскольку в этом образце нет ничего, что использовало бы CPU, вам придется опубликовать свой собственный код. Я также предлагаю вам подключиться к службе с помощью отладчика и нажать Ctrl + F5 - это нарушит выполнение, и вы сразу увидите, какой код выполняется. –

ответ

1

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

Это точно скажет вам, какая часть кода ударяет процессор.

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

Смежные вопросы