2011-12-19 26 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 2011-12-21 17:40:43

回答

6

udpClient.Connect设置默认的主机名和端口,所以随后您可以在不指定它们的情况下调用Send。花费时间的是名称解析 - 将HOSTNAME翻译成IP地址。

如果您在Connect中执行一次,则无需每次发送时都执行此操作,速度更快。

+0

我不知道,如果它只有**名称分辨率。但使用IP更快。在.NET中有什么好的DNS缓存链接?使用IE或FF的DNS缓存会很好。或者UDP-Client已经在使用任何DNS缓存? – andreas 2011-12-21 17:52:46

+0

我想你会使用OS的任何机制。但是,为什么这会打扰你呢?为什么不解决它一次(或一小时一次)并忘记它? – zmbq 2011-12-21 18:07:34