我想在一定时间内从流中过滤传入的包。
例如
5秒内过滤所有“A”
10:00:00 "A" <- show
10:00:01 "A" <- don't show
10:00:02 "B" <- show
10:00:03 "A" <- don't show
10:00:06 "A" <- show
我想过用一种 FIFO 来实现它。
你认为最好的解决方案是什么?
我正在使用 c#,.net 3.5
我没有看到 FIFO 的好处。取一个字典,其中字符串(“A”等)是键并存储忽略时间(例如DateTime.Now.AddSeconds(5)
,如果您担心由于计算机时间的变化而出现问题,则使用刻度)。每当您获得新项目时,请检查您的字典中是否有它。如果是,比较过期时间;如果尚未到达该项目,则忽略该项目。在所有其他情况下,保留该项目并将新的过期时间存储在字典中。
那么,您想查看第一个“A”或“B”数据包,但在经过一定时间之前没有重复?
您可以创建一个将类型(例如“A”)映射到 DateTime 或 timer-tick 值的哈希表。
对于您收到的每个数据包,请在哈希表中查找其类型。
如果未找到,请将其与从现在起五秒后的时间(例如)一起添加。然后输出数据包。
如果您确实在哈希表中找到它,请检查相关时间是否已经过去。
如果是,则计算新时间(从现在起五秒),替换旧时间,然后输出数据包。
如果不是,则忽略(过滤掉)数据包。
我不确定我是否正确理解了您的问题,但是您不能只存储您遇到的第一个 A 的时间,然后将每个传入的 A 与那个时间进行比较吗?如果不到 5 秒,则不显示,如果超过 5 秒,则重新设置时间并显示 A?