Aktualnie programuję aplikację kliencką i zastanawiam się, czy powinienem użyć klasy Socket "ReceiveAsync lub BeginReceive. Do tej pory używałem tego ostatniego, jednak zauważyłem, że wydaje się mocno obciążać procesor. Oto co mój otrzymać pętlę zasadniczo wygląda następująco:Wydajność metody 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);
}
Teraz Zastanawiałem się, czy robię coś źle tutaj, ponieważ inne aplikacje, które komunikują się z trudem stres procesora w ogóle. Zastanawiam się też, czy lepiej byłoby używać SocketAsyncEventArgs i ReceiveAsync.
Więc oto moje pytania:
Dlaczego moja pętla podkreślając CPU tak dużo? Czy powinienem używać SocketAsyncEventArgs i ReceiveAsync zamiast BeginReceive?
założę to becuase dzwonisz swoją meto d w pętli, w której nie ma blokowania, więc maksymalizujesz jeden z rdzeni - użyj klasy ManualResetEvent, aby w razie potrzeby wykonać blokowanie ręczne. – markmnl
Czy "socket_ReceiveFallback" jest rzeczywiście inną metodą w twoim wdrożeniu? – markmnl