2

我可以确定是否从SecureStream意志块中读取单个字节吗?底层流是 a NetworkStream,它具有DataAvailable属性,但我希望SecureStream需要缓冲字节才能正确操作,所以我认为我不能依赖底层流的DataAvailable.

或者,有什么方法可以执行Read永远不会阻塞的操作吗?我很确定没有;我一直讨厌这个StreamAPI,但也许我错过了什么?

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

4

1 回答 1

0

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

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

但我认为真正的问题是为什么 BeginRead 一开始就比较慢。

于 2013-05-14T19:07:57.723 回答