【问题标题】:SslStream slow depending on wrapping of BufferedStreamSslStream 缓慢取决于 BufferedStream 的包装
【发布时间】:2013-02-19 18:47:26
【问题描述】:

我最近调试了我使用 SslStream 的性能问题。

客户端是 C#/.NET 并且具有以下 Stream 配置

  • 原始套接字/NetStream
  • 由 BufferedStream 包装
  • 由 SslStream 包装
  • 由“协议”流包装(发送字节/整数/字符串等)

当我通过 Internet 将数据从客户端发送到服务器时,我发现性能极其缓慢,在客户端上序列化信息需要很长时间。

删除 SSL 流,连接速度达到预期水平。

然后我把上面的流配置改成..

  • 原始套接字/NetStream
  • 由 SslStream 包装
  • 由 BufferedStream 包装
  • 由“协议”流包装(发送字节/整数/字符串等)

连接速度达到预期水平。

有人能解释一下为什么更改流配置对性能有如此大的帮助吗?特别是当我在与服务器运行得非常快的同一台机器上使用客户端测试原始配置时?

【问题讨论】:

    标签: c# .net performance ssl buffer


    【解决方案1】:

    原因很简单。您保存一个 int(仅 4 个字节),它被包装到 SSL 数据包中,然后被缓冲。更改顺序后,您开始在缓冲区中收集大量数据,然后用 SSL 将其包装为一个大块。更少的 SSL 包装器,更高的速度。

    【讨论】:

    • 谢谢,这是有道理的。是否 SslStream 本身没有内部缓冲区,它只会加密并发送您每次调用 write() 时提供的内容?另外,我不确定我是否完全理解为什么当客户端与服务器在同一台机器上时,速度方面是可以的?
    • @MikeQ SSLStream 不知道您打算写入多少数据,因此它会分别发送您传递给它的每一块数据。至于本地与远程系统的速度 - 它是特定于实现的,因此只能猜测。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-30
    • 2016-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-18
    相关资源
    最近更新 更多