2012-03-17 7 views
8

私はNetworkStream.BeginReadを使用して、Socketから非同期に読み取ります。非同期読み取りのためにBufferedStreamでNetworkStreamをラップすることは安全ですか?

実際にBufferedStreamでネットワークストリームをラップするとはるかに高速です。

私の質問:NetworkStream.BeginReadは内部でSocket.BeginReceiveと、async IO(WindowsのCompletionPortsなど)のスタック全体を呼び出します。 BufferedStreamが真ん中にあるときも同じことが起こりますか?

+0

リフレクターから見えるものはありますか? – remio

+0

これは非同期呼び出し(BufferedStream)を実装していないので、何とかNetworkStreamまたは非同期を行うことができるベースストリームに行くかどうかわからないが、IOCPを使用しないafaik – pablo

答えて

2

BufferedStreamは効率的な非同期IOをサポートしていません。これは、Streamクラスから継承されたデフォルトの実装を使用します。スレッドプール上で同期IOを発行します。だから、あなたはIO完了ポートを手に入れません。あなたはこの作業を自分で行う必要があります。 C#5を使用している場合、BufferedStreamの実装をほぼ再利用して、非同期を打ち負かすことができます。

+0

これは何に基づいていますか? BufferedStreamソースを見ると、非同期操作は、基になるストリームで非同期操作を呼び出すことによって正しく実装されているようですか? –

+0

これは.NET 4.0に基づいています。 4.5ではこれはもはや真実ではない。いい視点ね。 – usr

+0

ああ、ご理解いただきありがとうございます。 –

関連する問題