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 数据包,我使用了键为 as 的有序字典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 回答