2012-03-17 12 views
8

Estoy usando NetworkStream.BeginRead para leer asincrónicamente de Socket.¿Es seguro ajustar NetworkStream con BufferedStream para lectura asíncrona?

Pero es mucho más rápido si realmente envuelve el flujo de red con un BufferedStream.

Mi pregunta: NetworkStream.BeginRead invoca internamente a Socket.BeginReceive y toda la pila de async IO (CompletionPorts en Windows, etc.). ¿Ocurre lo mismo cuando BufferedStream está en el medio?

+0

¿Hay algo visible de Reflector? – remio

+0

No implementa las llamadas asíncronas (el BufferedStream), por lo que no estoy seguro de si de alguna manera irá a NetworkStream o a la base Stream, que puede hacer asincrónico, pero afaik no usará IOCP – pablo

Respuesta

2

BufferedStream no admite E/S asíncrona eficiente. Utiliza la implementación predeterminada heredada de la clase Stream. Emitirá IO síncronas en el grupo de hilos. Por lo tanto, no obtendrá puertos de terminación de E/S que lo hagan. Necesitas hacer este trabajo tú mismo. Si está utilizando C# 5, casi puede volver a utilizar la implementación de BufferedStream y tratar de dar una bofetada asincrónica y lo espera.

+0

¿En qué se basa esto? Al observar las fuentes BufferedStream, parece que las operaciones asincrónicas se implementan correctamente llamando a las operaciones asincrónicas en la transmisión subyacente. –

+0

Se basa en .NET 4.0. En 4.5 esto ya no es verdad. Buen punto. – usr

+0

Ah, gracias por aclarar. –

Cuestiones relacionadas