Existe-t-il un moyen plus rapide de savoir si le client dispose de données? Je ne dis pas qu'il est lent à utiliser TcpClient.Available, mais je suis curieux de savoir si c'est le moyen le plus rapide.TcpClient.Available Optimisations
Répondre
TcpClient.Available n'est pas lent en soi, cela dépend de la façon dont vous l'utilisez.
Si vous ne l'utilisez que ponctuellement pour vérifier si les données sont disponibles, alors c'est la voie à suivre.
Si vous l'utilisez en boucle pour attendre des données, les performances globales de votre programme seront assez mauvaises. Voici une de cette mauvaise utilisation:
public void Receive()
{
while (tcpClient.Connected)
{
if (tcpClient.Available >= 0)
{
// Do something
}
}
}
Pour ce deuxième scénario, vous pouvez obtenir ce que vous voulez en utilisant soit:
- Asynchronous lit (regardez NetworkStream.BeginRead) => la plus évolutive
- Blocking lit (regardez la solution proposée here, qui fait usage de NetworkStream.Read)
Si tout ce que vous devez savoir, c'est s'il existe des données disponibles, et vous n'avez pas l'intention de faire quoi que ce soit avec les données, alors c'est probablement l'approche la plus rapide. Mais si vous choisissez d'interroger pour savoir s'il y a quelque chose à lire, utilisez les E/S asynchrones: lancez une opération de lecture asynchrone (BeginRead) et dès que des données arrivent, vous serez appelé à traiter. Ce sera beaucoup plus rapide (et plus efficace) que l'interrogation pour voir s'il pourrait y avoir des données.
- 1. Optimisations CALayer?
- 2. de base Queue Optimisations
- 3. Optimisations Jots Hotspot
- 4. C# optimisations région fixe
- 5. XCode 4 Optimisations
- 6. Optimisations booléennes jointes Swift
- 7. Optimisations des éléments imbriqués
- 8. Optimisations SQL Server
- 9. Tweaks/Optimisations pour iOS7
- 10. Optimisations de charge d'application .NET
- 11. MySQL requête a besoin Optimisations
- 12. Ruby on Rails SQL Optimisations
- 13. C++ Exception Throw/Catch Optimisations
- 14. Optimisations du compilateur/interprète Flash
- 15. optimisations des expressions booléennes dans Java
- 16. Quelles optimisations puis-je attendre de java.util.regex?
- 17. Optimisations dans les systèmes de sécurité
- 18. Optimisations pour l'algorithme de recherche d'intersections
- 19. Optimisations du compilateur de types anonymes
- 20. optimisations du compilateur, divisez extensions macro
- 21. java JIT - quelles optimisations sont possibles?
- 22. Code de profilage avec ou sans optimisations
- 23. Optimisations du système de fichiers (ext3)
- 24. Micro-optimisations JVM et JIT intelligentes
- 25. Compresseur YUI: Quelles sont les micro-optimisations?
- 26. ClosureCompiler suppression de code mort avec des optimisations avancées
- 27. Comment savoir quelles optimisations sont activées dans gcc?
- 28. Quelles sont les optimisations des moteurs JavaScript modernes?
- 29. Micro-optimisations: en utilisant intptr_t pour les types flag/bool
- 30. Bibliothèque de compilation avec des optimisations pauses graphiques
Dans quel type de scénario d'utilisation? Si vous avez une tonne de sockets et que vous voulez savoir si certains d'entre eux sont devenus lisibles, Socket.Select peut aussi être intéressant. – harold
Veuillez ne pas préfixer vos titres avec "C#" et ainsi de suite. C'est ce que les tags sont pour. –