我使用NetworkStream.BeginRead
從Socket
異步讀取。使用BufferedStream封裝NetworkStream進行異步讀取是否安全?
但是,如果您實際上用BufferedStream
包裝網絡流,速度會更快。
我的問題:NetworkStream.BeginRead
內部調用Socket.BeginReceive
和整個堆棧的異步IO(Windows上的CompletionPorts等)。 BufferedStream
在中間時是否也發生同樣的情況?
我使用NetworkStream.BeginRead
從Socket
異步讀取。使用BufferedStream封裝NetworkStream進行異步讀取是否安全?
但是,如果您實際上用BufferedStream
包裝網絡流,速度會更快。
我的問題:NetworkStream.BeginRead
內部調用Socket.BeginReceive
和整個堆棧的異步IO(Windows上的CompletionPorts等)。 BufferedStream
在中間時是否也發生同樣的情況?
BufferedStream不支持高效的異步IO。它使用從Stream類繼承的默認實現。它將在線程池上發出同步IO。所以你不會得到IO完成端口。你需要自己做這個工作。如果您使用的是C#5,則可以重新使用BufferedStream的實現,並嘗試使用異步並等待它。
這是基於什麼?看看BufferedStream源代碼,看起來異步操作可以通過調用底層流的異步操作來正確實現嗎? – 2014-09-20 10:14:43
它基於.NET 4.0。在4.5上,這不再是事實。好點子。 – usr 2014-09-20 15:20:46
啊,謝謝澄清。 – 2014-09-20 19:24:17
Reflector中是否有任何可見/可理解的內容? – remio 2012-03-18 20:57:10
它沒有實現異步調用(BufferedStream),所以我不知道它是否會以NetworkStream或基本流的形式進行異步調用,但不使用IOCP – pablo 2012-03-18 21:00:01