2009-06-10 7 views
1

Je fais un peu de recherche dans le développement d'un serveur socket simple qui fonctionnera comme un service Windows. Je vais écrire ceci en C#, mais j'ai été informé que les sockets .Net sont slllooooowwwww. Pour le déploiement initial en utilisant les classes .Net Networking sera bien, mais je me demande si quelqu'un a de l'expérience avec une bibliothèque de socket haute performance (et espérons-le gratuit). Je pense probablement à quelque chose écrit en C++ que je peux utiliser comme objet com dans .net.Recommandations de socket

J'ai déjà utilisé des socket indy, mais il ne semble plus y avoir de développement actif dans le projet. J'ai fait des recherches sur Google et j'ai trouvé quelques bibliothèques, mais j'espérais obtenir des commentaires de quelqu'un qui a réellement utilisé une bibliothèque de sockets avec un bon succès.

Toute aide appréciée. Merci.

+1

Je peux me tromper, mais je soupçonne que la perte de performance entre les Sockets .NET et l'utilisation d'une bibliothèque Socket COM C++ via P/Invoke sera égale ... – Nate

Répondre

2

Je reviendrais sur votre hypothèse initiale - je ne crois pas que ce soit exact. D'après mon expérience, l'utilisation des bibliothèques de socket framework de .NET n'est pas très élevée: elles fonctionnent assez bien. La principale cause du code de socket très lent, que j'ai vu, est quand les gens essayent de porter le code non-C# dans C# directement, en essayant en particulier de porter le code de socket C++ synchrone. Les prises du BCL .NET sont toutes conçues pour être utilisées de manière asynchrone. Si vous essayez de les forcer dans un modèle synchrone, vous finirez par ajouter un peu de blocage, ce qui provoque certainement un code très lent. Essayez d'utiliser les classes de socket de la façon dont elles ont été conçues - je pense que vous serez très heureux avec les performances, ainsi que la facilité d'utilisation.

+0

Merci pour la réponse. Ma première expérience avec les sockets .Net remonte à la version 1.0, et je ne savais pas vraiment ce que je faisais à l'époque. Je vais essayer les classes intégrées. – infocyde

+1

Selon ce que vous faites - il existe de nombreuses classes sympas pour gérer les sockets et la mise en réseau dans .NET maintenant. En particulier, jetez un coup d'œil à la WCF - cela peut vous rendre la vie beaucoup plus facile que vous ne le pensez (selon le projet). Les prises en .NET (en particulier post 2.0) sont très bonnes. –

2

On dirait que vous optimisez avant de devoir. Je voudrais aller de l'avant et le construire avec. NET et voir si vous avez un problème de performance avant d'essayer de faire quelque chose qui serait potentiellement plus lent. COM a beaucoup de frais généraux.

+0

Bon point. Je vais donner les classes .net et essayer de voir jusqu'où me trouver. – infocyde