我正在使用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
}
答案 0 :(得分:1)
我读了几件奇怪的事情:
1)为什么在Dictionary中使用Contains
?
objPortIPDict.Contains(ip.Source.ToString().Replace(".", "") + port)
如果objPortIPDict
是使用dic ContainsKey
2)从第一个派生。如果这是Dictionary,则其ContainsKey具有 O(1)执行时间,因此不会受到字典本身数据量的影响。
是的,它可能会受到影响,如果数据量如此大,则整个应用程序变得更慢,但是对于当前应用程序状态域,选择时间将始终保持不变。