当我发送数据时,我写入TcpClient的NetworkStream?

时间:2013-05-11 00:36:53

标签: c# .net

拥有像

这样的代码
            var stream = _tcpClient.GetStream();
            Serializer.Serialize(stream, message);

Serialize可能逐字节地调用Write我有点害怕 - 当stream将数据发送到服务器时?它会锁定发送每个字节吗?我应该致电flush以确保发送所有数据吗?写入MemoryStream而不是将整个字节数组写入stream会更有效吗?

1 个答案:

答案 0 :(得分:2)

您需要查看NoDelay属性。只要这是假的(这是默认值),TcpClient就不会在每次调用Write时发送数据包。它会缓冲起来,只有在感觉时间合适时才发送完整的数据包。对SendBufferSize进行一些调整也可能会有所帮助。

记录

NetworkStream.Flush什么都不做。

就锁定而言 - 在你的探查器告诉你这是一个问题之前不要担心。 : - )