我想使用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分钟。
那里有什么问题以及如何解决?
答案 0 :(得分:2)
问题出在您的测量中:您没有在任何地方重置秒表。不要调用stopwatch.Start()
方法,而是调用Restart()
方法。
重启():停止时间间隔测量,将经过时间重置为零,并开始测量经过时间。
while (true)
{
stopwatch.Restart();
udpClient.Send(buffer, buffer.Length, endPoint);
stopwatch.Stop();
Console.WriteLine("Sending took " + stopwatch.ElapsedMilliseconds + "ms");
Thread.Sleep(10);
}