Ich verwende NetworkStream.BeginRead
, um asynchron von einem Socket
zu lesen.
Aber es ist viel schneller, wenn Sie den Netzwerkstream tatsächlich mit einem BufferedStream
umbrechen.
Meine Frage: NetworkStream.BeginRead
ruft intern Socket.BeginReceive
und den gesamten Stack von async IO (CompletionPorts unter Windows usw.) auf. Tritt das gleiche auf, wenn BufferedStream
in der Mitte ist?
BufferedStream unterstützt kein effizientes asynchrones IO. Es verwendet die Standardimplementierung, die von der Stream-Klasse geerbt wurde. Es wird synchrone IOs im Thread-Pool ausgeben. Sie werden also keine IO-Completion-Ports bekommen. Sie müssen diese Arbeit selbst erledigen. Wenn Sie C # 5 verwenden, können Sie die Implementierung von BufferedStream fast wiederverwenden und versuchen, async zu schlagen und darauf zu warten.
Tags und Links c# asyncsocket