如何加快数据包处理?

时间:2013-01-09 13:05:22

标签: c# dump

我正在使用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
}

1 个答案:

答案 0 :(得分:1)

我读了几件奇怪的事情:

1)为什么在Dictionary中使用Contains

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

如果objPortIPDict是使用dic ContainsKey

2)从第一个派生。如果这是Dictionary,则其ContainsKey具有 O(1)执行时间,因此不会受到字典本身数据量的影响。

是的,它可能会受到影响,如果数据量如此大,则整个应用程序变得更慢,但是对于当前应用程序状态域,选择时间将始终保持不变。