2010-07-22 6 views
0

HI,Service Windows utilisant beaucoup de CPU (VB.NET)

Nous avons un périphérique sur le terrain qui envoie des paquets TCP à notre serveur une fois par jour. J'ai un service Windows qui écoute constamment ces paquets. Le code dans le service est à peu près une copie carbone de l'exemple MSDN (Asynchronous Server Socket Example) - la seule différence étant que notre implémentation n'envoie rien. Il reçoit, traite les données et ferme le socket. Le service commence juste un fil qui adresse immédiatement le code lié ci-dessus. Le problème est que lorsque je suis arrivé au gestionnaire des tâches du serveur sur lequel il est en cours d'exécution, le service semble être d'utiliser tout le CPU (il dit 99) tout le temps. J'ai été informé de cela par IT. Mais je ne comprends pas à quoi servent ces cycles CPU, le thread bloque juste sur allDone.WaitOne() n'est-ce pas?

J'ai également créé une application console avec le même code, ce qui fonctionne très bien, c'est-à-dire en utilisant la CPU uniquement lorsque les données sont traitées. La tâche dans chaque cas est terminée avec succès à chaque fois, mais la mise en œuvre du service, de l'apparence de celui-ci semble très inefficace. Que pourrais-je faire mal ici?

Merci.

+1

Puisqu'il n'y a rien dans cet échantillon qui utiliserait le CPU, vous devrez poster votre propre code. Je vous suggère également de vous attacher au service avec un débogueur et d'appuyer sur Ctrl + F5 - cela va briser l'exécution et vous verrez immédiatement quel code est en cours d'exécution. –

Répondre

1

Utilisez un profileur pour savoir où votre CPU est utilisée. Cela aurait dû être votre première étape - les profileurs sont l'un des principaux outils pour les programmeurs.

Il vous dira exactement quelle partie du code souffle le CPU.

Le code, btw., Semble terrible. Comme un exemple comment utiliser des cockets asynchrones, pas comme une bonne architecture pour un serveur multi-connexion. Désolé de le dire, vous devrez peut-être réécrire.

Questions connexes