我有使用PcapDotNet
DLL并发送数据包的应用程序。
在一些具有高速率(~50 Mbit / Sec或~9000 Packet / sec)的Pcap
个文件中,与原始Pcap
长度\持续时间相比,该播放需要很长时间,我可以看到~25%我的CPU(我有4个核心)被使用。
我在项目页面中问了这个问题,开发人员建议我将我的程序并行,以便我可以更好地利用我的资源,因为这是单线程程序。
这是我的函数发送数据包的例子,它做了最多的工作,这个函数还包括几个events
报告发送了多少数据包等...(不包括在mt示例中)< / p>
所以我的问题是,假设该功能是最有效的功能如何以更好的方式划分我的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
}
}
}
}
答案 0 :(得分:0)
你确定你没有旋转吗?您inputCommunicator
的阅读超时是什么时候?使用回调而不是无限循环来读取数据包可能是个更好的主意:
或者你可以使用异步I / O,因为你实际上没有做任何真正的CPU工作。
无论如何,请尝试分析应用程序。找出它花费时间的地方。找到任何并发问题。那么你会有一个更清晰的画面。