在windows中可以說我使用recv
函數從套接字接收數據。 我很好奇最佳緩衝區有多大?我可以使它成爲1024
字節,或者我可以使它成爲51200
字節或更大。我想知道哪一個對性能更好。C Windows緩衝區大小
這不僅適用於recv
函數,讓我們說讀一個大的文本文件,我想要一個非常大的緩衝區,或一個較小的緩衝區?
在windows中可以說我使用recv
函數從套接字接收數據。 我很好奇最佳緩衝區有多大?我可以使它成爲1024
字節,或者我可以使它成爲51200
字節或更大。我想知道哪一個對性能更好。C Windows緩衝區大小
這不僅適用於recv
函數,讓我們說讀一個大的文本文件,我想要一個非常大的緩衝區,或一個較小的緩衝區?
操作系統執行自己的緩衝,所以緩衝區的大小並不重要。性能損失在函數調用中:1字節的緩衝區效率低,因爲它需要對recv()
進行過多的調用。太大的緩衝區只是浪費空間。
最佳大小將是您希望接收或能夠在單個recv()
調用中處理的數據大小的兩倍,具有大約1或2個tcp幀的下限。
我個人使用4KB緩衝區,但這是我自己的偏好,它很大程度上取決於我正在編寫的應用程序。
操作系統已經對它進行了緩衝,所以你不妨在當時只讀一個字節。
這取決於您期望的數據類型和您期待的協議。 UDP例如會給你一個全包走那麼最佳的緩衝區大小可能是1500
真正的性能障礙將是函數調用(recv
在這種情況下),你將使。爲了提高性能,您可以從默認較大的值開始,然後分析正在接收的數據包大小。根據分析,您可以傳遞(幾乎)「理想」的緩衝區大小。
如果您有服務器類型的情況,您不知道要在其上運行哪些服務,則可以使用不同大小的緩衝池陣列,例如[128,1024,4096,16384,65536 ]。當有東西連接時,使用128個大小,如果所有128個大小都進來,下次使用1024 ......等等。
在客戶端或服務器已知的協議/加載,只是八九不離十猜測它,(多由其他海報:)
RGDS, 馬丁建議
每字節
一個上下文切換不給你任何「最佳表現獎」...... –