Actualmente estoy programando una aplicación de cliente y me pregunto si debería usar el método de clase Socket ReceiveAsync o BeginReceive. He estado utilizando este último hasta ahora, sin embargo, he encontrado que parece estresar bastante a la CPU. Aquí es lo que mi recibir bucle se ve básicamente como:Rendimiento de 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);
}
Ahora me he estado preguntando si estoy haciendo algo mal aquí, ya que otras aplicaciones que se comunican casi no hacen hincapié en la CPU en absoluto. Y también me pregunto si estaría mejor con el uso de SocketAsyncEventArgs y ReceiveAsync.
Así que aquí están mis preguntas:
¿Por qué mi bucle Destacando la CPU tanto? ¿Debo usar SocketAsyncEventArgs y ReceiveAsync en lugar de BeginReceive?
i apuesta es becuase que está llamando a su metho d en un bucle donde no hay bloqueo, por lo que está maximizando uno de sus núcleos: use la clase ManualResetEvent para hacer el bloqueo manual si es necesario – markmnl
¿Es realmente "socket_ReceiveFallback" un método diferente en su implementación? – markmnl