我想在一定的时间内过滤来自流的传入的包。用FIFO过滤器
例如
过滤器的所有 “A” 5秒
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” 5秒
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
我不知道,我已经明白正确的问题,但未能你只存储为您遇到的第一个和每个时间在接下来的时间里,你将时间与那段时间进行比较?如果少于5秒过去了,不要显示它,如果更多,然后重置时间并显示A?
我没有看到FIFO的好处。以字典(“A”等)为键并存储忽略时间的字典(例如DateTime.Now.AddSeconds(5)
,或者如果由于计算机时间改变而害怕问题,请使用刻度)。每当你得到一个新的项目,检查你是否在字典中。如果是,比较过期时间;如果项目尚未到达,则忽略该项目。在所有其他情况下,请保留该项目,并将新的过期时间存储在字典中。
因此,您希望看到第一个“A”或“B”数据包,但在一段时间过后才会重复发送数据包?
您可以创建一个将类型(例如“A”)映射到DateTime或计时器刻度值的散列表。
对于您收到的每个数据包,请在散列表中查找其类型。
如果未找到,请将其与现在的时间(比如说)一起添加5秒。然后输出数据包。
如果您确实在散列表中找到它,请检查相关时间是否已经过去。
如果是这样,计算一个新的时间(从现在起五秒钟),替换旧的时间,并输出数据包。
如果不是,请忽略(过滤)数据包。
哇,好的。你能告诉我,在几行“伪”代码? – Kai 2010-02-15 20:57:51
噢,你打我吧。 :-) – 2010-02-15 00:07:12
对不起,我下次再等几秒钟! ;) – Lucero 2010-02-15 00:20:57
好主意,但让我们想象我的应用程序运行2周和每2秒我得到一个新的项目。我可以在什么时候清理字典? – Kai 2010-02-15 00:37:54