【发布时间】:2014-06-02 21:05:22
【问题描述】:
我有使用PcapDotNet DLL 并发送数据包的应用程序。
在某些具有高速速率(~50 Mbit/Sec 或~9000 数据包每秒)的Pcap 文件中,与原始Pcap 长度\持续时间相比,播放需要很长时间,我可以看到~25% 的 CPU(我有 4 个核心)被利用。
我在项目页面中问过这个问题,开发人员建议我并行我的程序,以便更好地利用我的资源,因为这是单线程程序。
这是我发送数据包的函数示例,它完成的工作最多,该函数还包括几个events,例如报告发送了多少数据包等...(不包括在 mt 示例中)
所以我的问题是,假设函数是工作最多的函数,我怎样才能以更好的方式分配我的 CPU 资源?
using (PacketSendBuffer sendBuffer = new PacketSendBuffer((uint)capLength))
{
while (inputCommunicator.ReceivePacket(out packet) == PacketCommunicatorReceiveResult.Ok) // Read the packets from the file
{
if (packet != null)
{
try
{
_outputCommunicator.SendPacket(packet); // Send the Packets
_sentPackets++;
}
catch (Exception ex)
{
// Throw exception
}
}
}
}
【问题讨论】:
-
Pcap 只是昂贵,内核模式切换是不平凡的。并行化几乎不可能改善任何事情,线程可能只会轮流。 Pcap 有太多的活动部件,唯一确定的方法就是尝试一下。不要以为你会到达任何地方。如果不使用 Pcap,您会领先很多,目前尚不清楚您为什么需要它。套接字实现流,如果需要测试,也可以是文件流。
标签: c# .net multithreading pcap.net