.net 是否可以确定从SecureStream读取的内容是否会被阻止?

.net 是否可以确定从SecureStream读取的内容是否会被阻止?,.net,networking,stream,network-programming,.net,Networking,Stream,Network Programming,我能否确定从SecureStream读取单个字节是否会阻塞?底层流是一个NetworkStream,它具有DataAvailable属性,但我希望SecureStream需要缓冲字节才能正确运行,因此我认为我不能依赖底层流的DataAvailable 或者,是否有任何方法可以执行永不阻塞的读取?我很确定没有;我一直讨厌流API,但也许我遗漏了什么 原因:我们有一个TCP服务器实现,具有高度优化的路径来处理请求。特别是,对于每个请求,原始代码总是使用BeginRead,但我发现,只要数据已经可用(

我能否确定从
SecureStream
读取单个字节是否会阻塞?底层流是一个
NetworkStream
,它具有
DataAvailable
属性,但我希望
SecureStream
需要缓冲字节才能正确运行,因此我认为我不能依赖底层流的
DataAvailable

或者,是否有任何方法可以执行永不阻塞的
读取
?我很确定没有;我一直讨厌
API,但也许我遗漏了什么


原因:我们有一个TCP服务器实现,具有高度优化的路径来处理请求。特别是,对于每个请求,原始代码总是使用
BeginRead
,但我发现,只要数据已经可用(短请求总是发生),就用
Read
替换原始代码可以将我们的最大吞吐量提高20%以上。我想对这段代码的SSL变体做同样的处理。

我想知道为什么当数据可用时,
读取
开始
快得多。不应该那么激烈

您可以查看底层流的可用数据,如果数据超过几个字节,则可以假设数据可用并使用
读取
。否则,请使用
BeginRead
。为了安全起见,请将读取超时设置为毫秒,这样您就不会长时间阻塞以防错过


但我认为真正的问题是,为什么BeginRead首先要慢一些。

哦,当然,这并不是说它慢了50毫秒,不。但它确实会在每秒4000和5000次请求之间产生差异。在这个尺度上,我认为速度稍微慢一点是可以理解的。此外,你有没有具体的建议,多少是“少数”?