Attualmente sto programmando un'applicazione client e mi chiedo se dovrei usare il metodo ReceiveAsync o BeginReceive della classe Socket. Ho usato il secondo finora, tuttavia, ho trovato che sembra sottolineare la CPU un po '. Ecco ciò che il mio ciclo di ricezione appare fondamentalmente come:Prestazioni di ReceiveAsync vs. 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);
}
Ora mi sono chiesto se sto facendo qualcosa di sbagliato qui, dal momento che le altre applicazioni che comunicano difficilmente sottolineano la CPU a tutti. E mi chiedo anche se sarebbe meglio usare SocketAsyncEventArgs e ReceiveAsync.
Così qui sono le mie domande:
Perché il mio ciclo sottolineando la CPU così tanto? Devo usare SocketAsyncEventArgs e ReceiveAsync invece di BeginReceive?
Scommetto che è becuase si sta chiamando tua metho d in un ciclo in cui non vi è alcun blocco in modo che si stia esaurendo uno dei core: utilizzare la classe ManualResetEvent per eseguire il blocco manuale, se necessario – markmnl
"socket_ReceiveFallback" è effettivamente un metodo diverso nell'implementazione dell'utente? – markmnl