共用方式為


修訂第一:清除明顯

在這個版本的範例程式中,已進行一些明顯的變更,這會在改善效能方面採取初始步調。 此版本的程式碼遠不是效能微調,但這是一個良好的累加步驟,可檢查累加較佳方法的效果。

警告

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

 

#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:壓縮區區塊轉送

未來改善