C#UdpClient.Send得到的速度越来越慢

时间:2017-03-25 22:00:47

标签: c# udp

我想使用UDP将一堆低延迟的数据发送到另一台设备。

这是一个简短的片段,可以重现问题:

private void Form1_Shown(object sender, EventArgs e)
    {
        UdpClient udpClient = new UdpClient(9000);
        IPEndPoint endPoint = new IPEndPoint(IPAddress.Broadcast, 7000);

        new Thread(() =>
        {
            Stopwatch stopwatch = new Stopwatch();
            byte[] buffer = new byte[1922];
            while (true)
            {          
                stopwatch.Start();
                udpClient.Send(buffer, buffer.Length, endPoint);
                stopwatch.Stop();
                Console.WriteLine("Sending took " + stopwatch.ElapsedMilliseconds + "ms"); // stopwatch.ElapsedMilliseconds gets higher and higher
                Thread.Sleep(10);
            }
        }).Start();
    }

缓冲区每次都有相同的大小(在循环中),数据包每10毫秒发送一次......通常。

但约。每隔300毫秒需要1毫秒才能发送,所以在短时间内发送数据包需要1分钟。

那里有什么问题以及如何解决?

1 个答案:

答案 0 :(得分:2)

问题出在您的测量中:您没有在任何地方重置秒表。不要调用stopwatch.Start()方法,而是调用Restart()方法。

Stopwatch Class (MSDN)

  

重启():停止时间间隔测量,将经过时间重置为零,并开始测量经过时间。

while (true)
{          
    stopwatch.Restart();
    udpClient.Send(buffer, buffer.Length, endPoint);
    stopwatch.Stop();
    Console.WriteLine("Sending took " + stopwatch.ElapsedMilliseconds + "ms"); 
    Thread.Sleep(10);
}