我想在一定时间内从流中过滤传入的pakets。
e.g。
在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
答案 0 :(得分:3)
我没有看到FIFO的好处。拿一个字典,其中字符串(“A”等)是键并存储忽略时间(例如DateTime.Now.AddSeconds(5)
,或者如果您害怕由于计算机时间的变化而使用滴答声)。每当你得到一个新项目时,检查你是否在词典中有它。如果是,请比较到期时间;如果尚未到达,则忽略该项目。在所有其他情况下,请保留该项目,并将新的过期时间存储在字典中。
答案 1 :(得分:1)
那么,你想要看到第一个“A”或“B”数据包,但是在经过一定时间后才会重复?
您可以创建一个哈希表,将类型(例如“A”)映射到DateTime或timer-tick值。
对于您收到的每个数据包,请在哈希表中查找其类型。
如果没有找到,请将其与时间(比如说)一起添加五秒钟。然后输出数据包。
如果您确实在哈希表中找到它,请检查相关时间是否已经过去。
如果是这样,计算一个新时间(从现在起五秒),替换旧时间,然后输出数据包。
如果没有,请忽略(过滤掉)数据包。
答案 2 :(得分:0)
我不确定我是否正确理解了您的问题,但是您不能仅仅存储您遇到的第一个A和每个传入A的时间,然后将时间与那个时间进行比较?如果已经过了不到5秒,请不要显示,如果超过,则重置时间并显示A?