在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, 马丁建议
每字节
一个上下文切换不给你任何“最佳表现奖”...... –