2011-03-23 1 views
-1

Je veux développer un serveur TCP qui acceptera environ 5000 connexions client GPS J'ai actuellement développé un serveur TCP multi-thread simple qui est incapable de gérer même 100 clients. Il consomme environ 98% de CPU. Quel peut être le problème et quelle est la meilleure approche dans ce but?C# Serveur TCP pour la connexion de périphériques GPS

+5

Nous ne pouvons pas déboguer ce problème à moins de nous en dire plus sur votre application. – nos

+1

Multithreading est presque certainement la mauvaise réponse pour résoudre le [problème c10k] (http://www.kegel.com/c10k.html). – sarnold

+0

Vous pouvez exécuter un profileur de CPU et voir où l'application passe la majeure partie de ce temps CPU de 98%. –

Répondre

0

Vous devez utiliser les API socket asynchrones. Un thread par connexion ne peut pas être mis à l'échelle.

Ceci nécessitera de réécrire des quantités significatives du code existant pour qu'elles soient asynchrones.

+0

J'ai essayé avec des API de socket asynchrones. Mais le problème est le même. Il consomme beaucoup de cpu. Pouvez-vous me dire les raisons possibles? – user1041109

+0

Il est possible que le traitement de vos messages soit lié à l'UC. Vous devez utiliser un outil de surveillance des performances pour déterminer la raison exacte. –

+0

J'ai utilisé la trace de point pour surveiller l'utilisation du processeur et trouvé que Network.Read() prend plus de temps dans le mécanisme synchrone. Donc, j'ai introduit Thread.sleep avant cela. Maintenant, il ne prend pas beaucoup de CPU, mais comme le temps passe, le nombre de threads actifs augmente. J'ai essayé de fermer de force les threads en utilisant Abort(). Mais ça ne fait aucune différence – user1041109