2011-12-19 13 views
3

ボイラープレートのUDPコードをプロファイリングしましたが、スピードは少量のデータ(私の意図)を送信するのに非常に有効でした。UDP「接続」 - C#でのスピード

しかし、 "接続"方法は "送信"方法と比較して "非常に遅い"方法です。 これは50取る - 80ミリ秒:そのので、驚くべき速いので送信 udpClient = new UdpClient(); udpClient.Connect("HOSTNAME", 11000);

は、その後ほとんど、1ミリ秒でプロファイリングされていない: Byte[] sendBytes = Encoding.ASCII.GetBytes("Is anybody there?");

udpClient.Send(sendBytes, sendBytes.Length);

私は、このメソッドを "接続" のだろうかUDPは設計上コネクションレスであるためです。

私はconnectメソッドを省略した場合、その送信は、コールごとに遅いです: udpClient.Send(sendBytes, sendBytes.Length,"HOSTNAME",1100);

「接続」速度を改善するために、任意のチャンス?

免責事項:私はUDPが信頼できないと知っていますが、私のアプリ(クライアントの統計情報は100%正確ではありません)に関しては、パッケージが間違った順序で入っていて、

+0

私の質問は100%正確ではありませんでした。 UdtClientクラスのインスタンスを作成すると、すでに30〜40ミリ秒かかることがあります。最大80msを接続すると – andreas

答えて

6

udpClient.Connectは、デフォルトのホスト名とポートを設定します。したがって、指定しないとSendを呼び出すことはできません。時間がかかるのは名前解決です.HOSTNAMEをIPAddressに変換することです。

接続で1回実行する場合は、送信するたびに速く行う必要はありません。

+0

私はその** **名前の解決だけがわかりません。しかし、IPを使用する方が高速です。 .NETでのDNSキャッシュのための良いリンクはありますか? IEまたはFFのDNSキャッシュを使用することは素晴らしいことです。または、すでにUDPクライアントがDNSキャッシュを使用していますか? – andreas

+0

OSにはどのような仕組みが使われていると思います。しかし、なぜあなたを悩ませているのですか?なぜそれを一度(または1時間に1回)解決してそれを忘れるのですか? – zmbq

0

私は次のconlusionになってきた:

のC#で速くUDPを作成する方法はありません。標準MSDNサンプルのUdpClientが最適です。

私は、WinsockのコアAPIのラッパーが見つかりました: http://www.elitepvpers.com/forum/co2-programming/159327-advanced-winsock-c.html

をしかし、あなたは 速度がrougly管理UdpClientと同じです(http://msdn.microsoft.com/en-us/library/windows/desktop/ms737625(v=vs.85).aspxを参照)、「接続」打ったとき。

関連する問題