文章編號: 823764 - 上次校閱: 2007年2月28日 - 版次: 5.6 當您使用 Windows 通訊端 API 程式複製到 TCP 伺服器資料時,就會發生效能變慢
在此頁中徵狀當您執行程式,使用 Windows 通訊端 API 時,您可能會遇到效能變慢,當您將資料複製到 TCP 伺服器。 如果您對網路追蹤與網路 Sniffer 如 Microsoft 網路監視器,TCP 伺服器會傳送 TCP ACK 至最後一個區段中延遲的認可計時器 (也稱為延遲 ACK 計時器) 的 TCP 資料流中的 TCP 區段。Windows 作業系統的預設此計時器值會為 200 毫秒 (ms)。典型的資料流程傳送 64 千位元組 (KB) 的資料看起來類似下列的順序: Client->Server 1460 bytes Client->Server 1460 bytes Server->Client ACK Client->Server 1460 bytes Client->Server 1460 bytes Server->Client ACK .... Client->Server 1460 bytes Client->Server 1460 bytes Server->Client ACK-PUSH Client->Server 1296 bytes -> delayed ACK 200 ms 發生的原因之所以發生這個問題,因為是架構上的 Windows 通訊端 API 和 Afd.sys 行為。如果下列情況成立,就會發生這個問題:
其他可行方案如果要解決這個問題,使用下列其中一種方法。 方法 1: 使用封鎖通訊端非封鎖通訊端只會發生這個問題。當您使用 [封鎖的通訊端這個問題不會發生因為 Afd.sys 以不同方式處理通訊端緩衝區。如需封鎖和非封鎖通訊端程式設計有關的詳細資訊,請參閱 Microsoft 平台 SDK 文件。方法 2: 讓通訊端傳送緩衝區大小大於程式傳送緩衝區大小修改通訊端傳送緩衝區、 使用 Windows 通訊端 getsockopt 函式來判斷目前通訊端傳送緩衝區大小 (SO_SNDBUF),然後使用 setsockopt 函式來設定通訊端傳送緩衝區大小。當您完成 SO_SNDBUF 值必須至少 1 個位元組大於程式傳送緩衝區大小。修改 傳送 呼叫或 WSASend 呼叫指定緩衝區大小至少 1 個位元組小於 SO_SNDBUF 值。在 < 原因 > 一節中本篇文章稍早範例,您可以修改下列值 方法 3: 修改 TCP 伺服器上的 [TCP/IP] 設定重要這個區段、 方法或任務包含告訴您如何修改登錄的步驟。然而,如果您不當修改登錄,可能會發生嚴重的問題。因此,執行這些步驟時請務必小心。為加強保護,修改登錄之前,請務必將它備份起來。以後您就可以在發生問題時還原登錄。如需有關如何備份和還原登錄的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:322756?
(http://support.microsoft.com/kb/322756/
)
如何備份和還原在 Windows 登錄 修改 TCP/IP 設定 TCP 伺服器上的以立即接受連入 TCP 區段。此解決方法最適合在環境中,並且其基底的大型的用戶端安裝,而且您無法在此變更程式的行為。針對案例遠端 TCP 伺服器是在 Windows 架構的伺服器執行的位置,您必須修改遠端伺服器的登錄。對於其他作業系統作業系統的資訊,請參閱說明文件有關如何變更延遲的認可計時器。 在執行 Windows 2000 伺服器上,請依照下列步驟執行:
方法 4: 修改 Afd.sys 在非封鎖通訊端的緩衝行為重要這個區段、 方法或任務包含告訴您如何修改登錄的步驟。然而,如果您不當修改登錄,可能會發生嚴重的問題。因此,執行這些步驟時請務必小心。為加強保護,修改登錄之前,請務必將它備份起來。以後您就可以在發生問題時還原登錄。如需有關如何備份和還原登錄的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:322756?
(http://support.microsoft.com/kb/322756/
)
如何備份和還原在 Windows 登錄 附註 這個登錄機碼才可用的 Service Pack 1 與後續的 Service Pack 的 Windows Server 2003。
狀況說明Microsoft 已確認<適用於>一節所列之 Microsoft 產品確實有此問題。 ?考這篇文章中的資訊適用於:
機器翻譯重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。 按一下這裡查看此文章的英文版本:823764?
(http://support.microsoft.com/kb/823764/en-us/
)
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。 | 其他資源 其他支援網站社群立即取得協助文章翻譯
|






Windows Live
Facebook
Twitter
Linkedin
Digg it
Yahoo
Delicious
StumbleUpon
Yammer
Reddit
Technorati
FriendFeed
Email


回此頁最上方
