1

我想在一定时间内从流中过滤传入的包。

例如

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

4

3 回答 3

3

我没有看到 FIFO 的好处。取一个字典,其中字符串(“A”等)是键并存储忽略时间(例如DateTime.Now.AddSeconds(5),如果您担心由于计算机时间的变化而出现问题,则使用刻度)。每当您获得新项目时,请检查您的字典中是否有它。如果是,比较过期时间;如果尚未到达该项目,则忽略该项目。在所有其他情况下,保留该项目并将新的过期时间存储在字典中。

于 2010-02-15T00:05:22.203 回答
1

那么,您想查看第一个“A”或“B”数据包,但在经过一定时间之前没有重复?

您可以创建一个将类型(例如“A”)映射到 DateTime 或 timer-tick 值的哈希表。

对于您收到的每个数据包,请在哈希表中查找其类型。

如果未找到,请将其与从现在起五秒后的时间(例如)一起添加。然后输出数据包。

如果您确实在哈希表中找到它,请检查相关时间是否已经过去。

如果是,则计算新时间(从现在起五秒),替换旧时间,然后输出数据包。

如果不是,则忽略(过滤掉)数据包。

于 2010-02-15T00:06:38.957 回答
0

我不确定我是否正确理解了您的问题,但是您不能只存储您遇到的第一个 A 的时间,然后将每个传入的 A 与那个时间进行比较吗?如果不到 5 秒,则不显示,如果超过 5 秒,则重新设置时间并显示 A?

于 2010-02-15T00:04:32.987 回答