我使用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