2013-02-19 45 views
0

我最近调试性能问题与我如何使用SslStream。SslStream缓慢取决于BufferedStream的包装

客户端是C#/。NET和具有如下流配置

  • 原始套接字/ NetStream的
  • 通过BufferedStream裹
  • 裹通过SslStream
  • 通过 “协议” 流裹(其发送字节/整数/字符串等)

从AC发送数据时,我看到极其缓慢性能在服务器上,在互联网上,需要很长时间才能在客户端对信息进行序列化。

删除SSL流并且连接加速到预期的级别。

然后,我改变上述流配置为..

  • 原始套接字/ NetStream的
  • 通过SslStream裹
  • 通过BufferedStream <裹 - 移动此
  • 裹通过 “协议”流(发送字节/整数/字符串等)

并且连接加速到expecte d水平。

有人可以解释为什么改变流配置有助于提高性能吗?特别是当我测试原始配置时,客户端与服务器在同一台机器上运行速度非常快?

回答

3

原因很简单。你保存一个int(只有4个字节),它被封装到SSL数据包中,然后进行缓冲。更改订单后,您开始在缓冲区中收集大量数据,然后使用SSL将其作为一个大块包装。更低的SSL封装,更高的速度。

+0

谢谢,这是有道理的。 SslStream没有内部缓冲区的情况下,它会加密并发送你每次调用write()时给它的东西吗?另外我不确定我完全明白为什么速度方面,当客户端与服务器在同一台机器上时,它是可以的。 – 2013-02-19 20:00:04

+0

@MikeQ SSLStream不知道你打算写多少数据,所以它会将你传递给它的每一块文件分别发送给它。至于本地和远程系统的速度 - 它是针对具体实现的,所以人们只能猜测。 – 2013-02-20 07:39:30