如何增加特定操作的处理器利用率

时间:2014-04-18 10:57:20

标签: c# .net multithreading pcap.net

我有使用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
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

你确定你没有旋转吗?您inputCommunicator的阅读超时是什么时候?使用回调而不是无限循环来读取数据包可能是个更好的主意:

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

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

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

相关问题