2013-02-19 48 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