私は現在クライアントアプリケーションをプログラミングしていますが、SocketクラスのReceiveAsyncまたはBeginReceiveメソッドを使用する必要があるのかどうかは疑問です。私はこれまでの後者を使用していましたが、CPUにかなりのストレスがかかるようです。私はここで何か間違ったことをやっている場合今、私はほとんどすべてでCPUを強調していない通信を行う他のアプリケーションから、思ってきたReceiveAsyncとBeginReceiveのパフォーマンス
private void socket_ReceiveCallback(IAsyncResult result_)
{
// does nothing else at the moment
socket.EndReceive(result_);
byte[] buffer = (byte[])result_.AsyncState;
// receive new packet
byte[] newBuffer = new byte[1024];
socket.BeginReceive(newBuffer, 0, newBuffer.Length, SocketFlags.None,
socket_ReceiveFallback, newBuffer);
}
:ここでループは基本的にのように見える受け取る私のものです。また、SocketAsyncEventArgsとReceiveAsyncを使用する方が良いかどうかも疑問に思っています。だからここ
は私の質問です:
はなぜ私のループはそんなにCPUを強調していますか? BeginReceiveの代わりにSocketAsyncEventArgsとReceiveAsyncを使用する必要がありますか?
を私はあなたがあなたのメトを呼び出しているbecuaseそれは賭けあなたのコアのうちの1つを最大限に活用するために、ブロッキングがないループで - ManualResetEventクラスを使用して、必要に応じて手動ブロッキングを行います。 – markmnl
"socket_ReceiveFallback"はまったく別の実装方法ですか? – markmnl