在此版本的範例程式中,已進行一些明顯的變更,以在改善效能方面取得初步進展。 此版本的程式代碼遠未經過效能調整,但這是一個良好的累加步驟,可檢查累加更好的方法效果。
警告
此應用程式範例會提供刻意不佳的效能,以說明程式代碼變更可能會改善效能。 請勿在應用程式中使用此程式碼範例;僅供說明之用。
#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%
相關主題