是否可以确定SecureStream的读取是否会阻塞?

时间:2013-05-14 18:49:50

标签: .net networking stream network-programming

我可以确定从SecureStream读取单个字节是否会阻止?底层流是NetworkStream,它具有DataAvailable属性,但我希望SecureStream需要缓冲字节才能正常运行,所以我认为我不能依赖于基础流的DataAvailable

或者,有没有办法执行永远不会阻止的Read?我很确定没有;我总是讨厌Stream API,但也许我错过了什么?

为什么:我们有一个TCP服务器实现,具有高度优化的路径来处理请求。特别是,原始代码总是对每个请求使用BeginRead,但我发现只要数据已经可用(这种情况一直发生在短请求中),用Read替换它会增加我们的最大吞吐量超过20%。我想对此代码的SSL变体执行相同的操作。

1 个答案:

答案 0 :(得分:0)

我想知道为什么Read在数据可用时比BeginRead快得多。它不应该那么激烈。

您可以查看基础流的可用数据,如果它超过几个字节,您可以假设数据可用并使用Read。否则,请使用BeginRead。为了安全起见,请将ReadTimeout设置为毫秒,这样您就不会长时间阻挡。

但我认为真正的问题是为什么BeginRead首先会变慢。