2012-03-17 12 views
8

Sto usando NetworkStream.BeginRead a leggere in modo asincrono da un Socket.È sicuro avvolgere NetworkStream con BufferedStream per la lettura asincrona?

Ma è molto più veloce se si avvolge il flusso di rete con un BufferedStream.

La mia domanda: NetworkStream.BeginRead invoca internamente allo Socket.BeginReceive e all'intero stack di IO asincrono (CompletionPorts su Windows e così via). Succede lo stesso quando BufferedStream è nel mezzo?

+0

C'è qualcosa visibile/comprensibile da riflettore? – remio

+0

Non implementa le chiamate asincrone (il BufferedStream) quindi non sono sicuro se andrà in qualche modo a NetworkStream o al flusso di base, che può fare async, ma afaik non usando IOCP – pablo

risposta

2

BufferedStream non supporta un IO asincrono efficiente. Usa l'implementazione predefinita ereditata dalla classe Stream. Emetterà IO sincroni sul pool di thread. In questo modo non otterrai le porte di completamento dell'IO. Devi farlo da solo. Se stai usando C# 5 puoi quasi riutilizzare l'implementazione di BufferedStream e provare a schiaffeggiare async e attendere su di esso.

+0

Su cosa si basa? Osservando le fonti di BufferedStream sembra che le operazioni asincrone siano implementate correttamente chiamando operazioni asincrone sul flusso sottostante? –

+0

È basato su .NET 4.0. Alla 4.5 questo non è più vero. Buon punto – usr

+0

Ah, grazie per aver chiarito. –

Problemi correlati