Ist es sicher, NetworkStream mit BufferedStream für Async-Lesen zu umbrechen?

8

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?

    
pablo 17.03.2012, 01:02
quelle

1 Antwort

2

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.

    
usr 18.03.2012, 23:07
quelle

Tags und Links