0

我有使用PcapDotNetDLL 并发送数据包的应用程序。在某些Pcap具有高速速率(~50 Mbit/Sec 或~9000 数据包每秒)的文件中,与原始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
            }
        }
    }
}
4

1 回答 1

0

你确定你不是在旋转?你的读取超时是inputCommunicator多少?使用回调而不是无限循环来读取数据包可能是一个更好的主意:

http://pcapdotnet.codeplex.com/wikipage?title=Pcap.Net%20Tutorial%20-%20Opening%20an%20adapter%20and%20capturing%20the%20packets

或者你可以使用异步 I/O,因为你实际上并没有做任何真正的 CPU 工作。

无论如何,请尝试分析应用程序。找出它花时间的地方。查找任何并发问题。那你就会有一个更清晰的画面。

于 2014-04-18T11:06:35.347 回答