我可以确定从SecureStream
读取单个字节是否会阻塞吗?底层流是一个NetworkStream
,它具有DataAvailable
属性,但我期望SecureStream
需要缓冲字节才能正确操作,所以我认为我不能依赖底层流的DataAvailable
。
或者,是否有任何方法来执行Read
,永远不会阻塞?我很确定没有;我一直讨厌这个关于Stream
API,但也许我错过了什么?
为什么:我们有一个TCP服务器实现与高度优化的路径来处理请求。特别是,原始代码总是对每个请求使用BeginRead
,但是我发现,只要数据已经可用(短请求总是发生这种情况),就用Read
替换它,将我们的最大吞吐量提高了20%以上。我想对这段代码的SSL变体做同样的事情。
我想知道为什么Read
在数据可用时比BeginRead
快得多。不应该那么激烈。
您可以查看底层流的可用数据,如果它超过几个字节,您可以假设数据可用并使用Read
。否则,请使用BeginRead
。为了安全起见,请将ReadTimeout
设置为毫秒,这样您就不会在错过时长时间阻塞
但是我认为真正的问题是为什么BeginRead在第一个地方更慢。