一次要馈送NetworkStream.Write()的数据量

本文关键字:Write NetworkStream 数据 一次 | 更新日期: 2023-09-27 18:00:28

我正在动态加密数据并将其写入网络流。

我应该在每个16字节加密的块数据可用时立即写入流,还是应该缓冲它?发送一束16字节的写入而不是一个20千字节或1兆字节的写入会对性能造成影响吗?

一次要馈送NetworkStream.Write()的数据量

尽可能多地给它喂食,它会让你知道它是否不能再吃了。TCP将为您处理缓冲。

此外,你馈送的越多越好,可能会导致流量减少,因为数据包不会太分散。

默认情况下,Socket使用Nagle算法,该算法旨在通过使套接字缓冲小数据包,然后在特定情况下将它们组合在一个数据包中发送来减少网络流量。TCP数据包由40个字节的报头加上正在发送的数据组成。当使用TCP发送小数据包时,TCP报头产生的开销可能会成为网络流量的重要组成部分。在负载严重的网络上,这种开销导致的拥塞可能导致数据报和重传丢失,以及拥塞导致的过多传播时间。如果连接上以前传输的任何数据未被确认,则当用户收到新的传出数据时,Nagle算法禁止发送新的TCP段。

你可以关闭Nagle算法,但这可能会导致更多的碎片和流量。