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