0

pcap.netライブラリを使用して C#.net で通話録音アプリケーションを開発しています。パケットキャプチャには、Wireshark のDumpcap.exe. また、パケット ファイルは 5 秒間で作成されます。私がやったことは、各パケットファイルを読み取ることです

   OfflinePacketDevice selectedDevice = new OfflinePacketDevice(filename);
            using (PacketCommunicator communicator =
           selectedDevice.Open(65536,                                  // portion of the packet to capture
                // 65536 guarantees that the whole packet will be captured on all the link layers
                               PacketDeviceOpenAttributes.Promiscuous, // promiscuous mode
                               0))                                  // read timeout
            {

                communicator.ReceivePackets(0, DispatcherHandler);

DispatcherHandlerメソッドでは、各パケットを処理しています。各ファイルのDispatcherHandler呼び出しにかかる時間は 0 秒です。

同じ方法で RTP パケット パケットを処理すると、遅延が発生します。

rtp パケットを特定するために、キーが の順序付き辞書ipadrress+portnumberを使用しました。したがって、各 rtp パケットが来るたびに、このキーが辞書に存在するかどうかを確認する必要があります。このタスクは、各ダンプ ファイルの処理が遅くなります。

if (objPortIPDict.Contains(ip.Source.ToString().Replace(".", "") + port))
{
 // here i write the rtp payload to a file
}
4

1 に答える 1

1

私はいくつかの奇妙なことを読みました:

1)辞書で使用Containsする理由

objPortIPDict.Contains(ip.Source.ToString().Replace(".", "") + port)

辞書の場合objPortIPDictは、ContainsKey を使用します

2) 最初から派生します。これがDictionaryの場合、そのContainsKeyの実行時間はO(1)であるため、辞書自体のデータ量の影響を受けません。

はい、データ量が非常に大きくなり、アプリケーション全体が遅くなる場合、影響を受ける可能性がありますが、現在のアプリケーション状態ドメインに関しては、ピック時間は常に一定のままです。

于 2013-01-09T13:09:00.150 に答える