Jam*_*nne 7 .net c# udp multicast delay
我正在C#中编写UDP多播客户端/服务器对,我需要50-100μsec(微秒)的延迟来限制服务器传输速率.这有助于避免重大数据包丢失,还有助于防止磁盘I/O绑定的客户端过载.请不要建议Thread.Sleep或Thread.SpinWait.我不会问我是否需要其中任何一个.
我的第一个想法是使用某种高性能计数器,然后做一个简单的while()循环来检查已用时间,但我想避免这种情况,因为它感觉很笨拙.那不会也会占用服务器进程的CPU利用率吗?
跨平台解决方案的奖励积分,即不是Windows特定的.先谢谢你们!
非常短的睡眠时间通常最好通过CPU旋转循环(就像你描述的那种).您通常希望避免使用高精度计时器调用,因为它们本身可能会占用时间并使结果出现偏差.在这么短的等待时间内,我不会太担心服务器上的CPU挂起.
我会将行为封装在一个类中,如下所示:
我会使用秒表,但需要一个循环
阅读此内容可为秒表添加更多扩展名,例如ElapsedMicroseconds
或类似的东西也可能有用
System.Diagnostics.Stopwatch.IsHighResolution 必须是真的
static void Main(string[] args)
{
Stopwatch sw;
sw = Stopwatch.StartNew();
int i = 0;
while (sw.ElapsedMilliseconds <= 5000)
{
if (sw.Elapsed.Ticks % 100 == 0)
{ i++; /* do something*/ }
}
sw.Stop();
}
Run Code Online (Sandbox Code Playgroud)