测试某个事件是否经过N毫秒的最快方法

jav*_*red 0 c#

我正在写udp组播数据报接收器.

如果我收到数字X的数据报并且数据报"X-1"仍未收到,我应该等待5毫秒(因为UDP不保证数据包的顺序),如果数据报"X-1"仍未收到,我应该恢复.

怎么做?我希望在收到数据包时为数据中的每个接收数据包存储"时间戳".后来我想比较当前时间和时间戳,如果差异超过5毫秒且数据包X-1丢失,我应该恢复.

可能你可以建议另一种算法?

或者如果我很好,我怎么能将"当前时间"转换为"int"或"long"毫秒?我不想使用DateTime.Now对象,因为它包含我不需要的大量垃圾,我需要每秒处理数千次这样的处理.

Jon*_*eet 8

DateTime.Now实际上并不"包含大量垃圾" - 它是一种只包装一个的值类型ulong.我实际上建议您使用a Stopwatch,因为这是测量时间差异的更合适的类型.(正如评论中所述,DateTime.Now无论如何,实际的准确度对你来说太低了.)

我个人建议为你需要的每一个创建一个秒表,但你可以只用一个.(提示:每秒分配"几千个"对象对.NET来说不是问题... 证明最简单的解决方案在转移到更复杂的东西之前太慢了.)

当然,Stopwatch处理测量时间而不是等待时间.现在还不清楚你在这种情况下"恢复"是什么意思 - 你肯定需要采取一些行动,或者你能等到下一个数据报进来吗?如果可能的话,我会让代码被动,在每个数据包到达时做"正确的事情",使用秒表来计算一个数据包与下一个数据包之间的差异,如果有必要的话.

出于测试目的,您可能希望将秒表包装在界面中,以便您可以注入测试双.