クライアントにデータがあるかどうかを確認する方法はありますか?私はそれがTcpClient.Availableを使うのが遅いと言っているわけではありませんが、それが最速の方法かどうかを知りたいのです。TcpClient.Available最適化
3
A
答えて
2
TcpClient.Availableはそれ自体が遅くはなく、使い方によって異なります。
使用可能なデータがあるかどうかを確認するためにのみ使用する場合は、その方法があります。
データを待つためにループ内で使用すると、プログラム全体のパフォーマンスが非常に悪くなります。ここでは、この悪い使い方の一つである:
- 非同期読み込み(NetworkStream.BeginReadを見て)=>最もスケーラブルな
- ブロッキング:この2番目のシナリオについては
public void Receive() { while (tcpClient.Connected) { if (tcpClient.Available >= 0) { // Do something } } }
、あなたはどちらかを使用して、あなたが望むものを達成することができます(NetworkStream.Readを利用して提案されたソリューションhereを参照してください)
1
利用可能なデータがあるかどうかを知る必要があり、データで何かをするつもりがない場合は、おそらく最も速いアプローチです。
しかし、ポーリングして何かがあるかどうかを判断する場合は、非同期I/Oを使用します。非同期読み取り操作(BeginRead)を開始し、データが到着すると直ちにそれを処理する。これは、データがあるかどうかを調べるために、ポーリングよりもはるかに高速(かつ効率的)になります。
関連する問題
- 1. SQL最適化最適化?
- 2. NetworkStream.DataAvailableとTcpClient.Available
- 3. SslStream相当のTcpClient.Available?
- 4. ハッキングテール最適化
- 5. FCallAdd最適化
- 6. Concat最適化
- 7. /最適化
- 8. 最適化スロークエリ
- 9. 最適化アルゴリズム
- 10. ループアンローリング&最適化
- 11. 最適化
- 12. 最適化ネットシーケンシャルコード
- 13. 最適化が
- 14. 最適化
- 15. ケース最適化
- 16. は、最適化
- 17. 最適化
- 18. 最適化Volley
- 19. 最適化が
- 20. 最適化:モンゴ
- 21. リニアコンビナトリアル最適化
- 22. SQL最適化
- 23. CALayer最適化?
- 24. lvm最適化
- 25. 最適クラスタ化
- 26. カフカレイテンシ最適化
- 27. 進化的最適化アルゴリズム
- 28. 最終キーワードの最適化
- 29. RIAアプリケーションの最適化と最小化
- 30. JavaScriptの最小化と最適化
どのような使用状況のシナリオでですか?大量のソケットがあり、そのうちのどれかが読み込み可能になっているかどうかを知りたければ、Socket.Selectも興味深いかもしれません。 – harold
タイトルに「C#」などのプレフィックスを付けないでください。それはタグのためのものです。 –