C# 如何加速数据包处理?

C# 如何加速数据包处理?,c#,dump,C#,Dump,我正在使用pcap.net库在C#.net中开发一个呼叫记录应用程序。对于数据包捕获,我使用Wireshark的Dumpcap.exe。包文件在5秒内创建。要读取每个数据包文件,我所做的是 OfflinePacketDevice selectedDevice = new OfflinePacketDevice(filename); using (PacketCommunicator communicator = selectedDevice.O

我正在使用
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数据包,我使用了有序字典,键为
ipadress+portnumber
。所以,当每个rtp包到达时,我需要检查字典中是否存在这个密钥。此任务在处理每个转储文件时变得越来越慢

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

我读了一些奇怪的东西:

1) 为什么在中使用
包含

如果
objPortIPDict
是词汇用法

2) 从第一个派生。如果这是一个,那么它有O(1)执行时间,因此不受字典本身中数据量的影响


是的,如果数据量过大,整个应用程序的速度会变慢,则可能会受到影响,但对于当前应用程序状态域,拾取时间将始终保持不变

没错。这是O(1),因为字典使用散列码,当然,散列码是按O(1)计算的。如果字典变得非常满,以至于出现了大量哈希代码冲突,那么它将比O(1)慢得多-但在此之前,您可能会耗尽内存(至少对于32位程序而言)。objPortIPDict是一种有序字典。因为插入的键不是数字,其格式类似于“10.10.10.504000”。搜索键时会变慢吗?如果使用ContainsKey,则不会。Contains确定System.Collections.Specialized.OrderedDictionary集合是否包含特定键。
objPortIPDict.Contains(ip.Source.ToString().Replace(".", "") + port)