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#、.net3.5を使用しています

4

3 に答える 3

3

FIFOのメリットはわかりません。文字列(「A」など)がキーである辞書を取り、無視時間を保存します(たとえばDateTime.Now.AddSeconds(5)、コンピューター時間の変更による問題が心配な場合は、ティックを使用します)。新しいアイテムを入手するたびに、辞書にあるかどうかを確認してください。はいの場合、有効期限を比較します。まだ到達していない場合は、アイテムを無視します。それ以外の場合は、アイテムを保持し、新しい有効期限を辞書に保存するだけです。

于 2010-02-15T00:05:22.203 に答える
1

それで、最初の「A」または「B」パケットを見たいのですが、一定の時間が経過するまで繰り返されませんか?

タイプ(「A」など)をDateTimeまたはtimer-tick値にマップするハッシュテーブルを作成できます。

受信するすべてのパケットについて、ハッシュテーブルでそのタイプを探します。

見つからない場合は、今から5秒後の時間(たとえば)と一緒に追加します。次に、パケットを出力します。

ハッシュテーブルでそれを見つけた場合は、関連する時間がすでに経過しているかどうかを確認してください。

その場合は、新しい時刻(今から5秒後)を計算し、古い時刻を置き換えて、パケットを出力します。

そうでない場合は、パケットを無視(フィルターで除外)します。

于 2010-02-15T00:06:38.957 に答える
0

あなたの問題を正しく理解したかどうかはわかりませんが、最初に遭遇したAの時間を保存し、その後の各Aの時間をその時間と比較することはできませんか?5秒未満が経過した場合は表示せず、それ以上の場合は時間をリセットしてAを表示しますか?

于 2010-02-15T00:04:32.987 に答える