共用方式為


修訂一:清理顯而易見的問題

在此版本的範例程式中,已進行一些明顯的變更,以在改善效能方面取得初步進展。 此版本的程式代碼遠未經過效能調整,但這是一個良好的累加步驟,可檢查累加更好的方法效果。

警告

此應用程式範例會提供刻意不佳的效能,以說明程式代碼變更可能會改善效能。 請勿在應用程式中使用此程式碼範例;僅供說明之用。

 

#include <windows.h>

BYTE Set(row, col, bAlive)
{
    SOCKET s = socket(...);
    BYTE byRet = 0;
    BYTE tmp[3];
    tmp[0] = (BYTE)row;
    tmp[1] = (BYTE)col;
    tmp[2] = (BYTE)bAlive;
    bind( s, ... );
    connect( s, ... );
    send( s, &tmp, 3 );
    recv( s, &byRet, 1 );
    closesocket( s );
    return byRet;
}

此版本的變更

此版本反映下列變更:

  • 已移除 SNDBUF=0。 消除了因未緩衝的傳送和延遲確認而造成的 200 毫秒延遲。
  • 已移除 Send-Send-Receive 行為。 這項變更消除了由於 Nagle 和延遲的 ACK 互動而引起的 200 毫秒延遲。
  • 已移除小端假設。 位元組現在依序排列。

剩餘問題

在此版本中,下列問題仍然存在:

  • 應用程式仍會大量連線。 由於移除 600+ 毫秒的延遲,因此應用程式現在達到每秒 12 個連線持續速率。 許多並行連線現在會變成問題。
  • 應用程式仍然保持臃腫;未變更的儲存格仍會傳送至伺服器。
  • 應用程式的串流效能仍然不佳:3 位元組傳送仍然只傳送很小的數據量。
  • 應用程式現在會傳送 2 個字節/RTT,這等於直接連線乙太網路上的 4 KB/秒。 速度不算太快,但 TIME-WAIT 可能會先造成問題。
  • 管理成本降到 99.3%,這仍然不是好的管理成本百分比。

關鍵效能計量

下列主要效能指標以往返時間(RTT)、Goodput 和通訊協定額外負荷表示。 如需這些詞彙的說明,請參閱 網路術語 主題。

此版本反映下列效能計量:

  • 蜂窩時間 - 2×RTT
  • Goodput — 2 個字節/RTT
  • 通訊協議額外負荷 - 99.3%

改善緩慢的應用程式

網路術語

基準版本:效能不佳的應用程式

修訂第2版:重新設計以減少連接

修訂 3:壓縮區塊傳送

未來改進