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)