拥有像
这样的代码 var stream = _tcpClient.GetStream();
Serializer.Serialize(stream, message);
Serialize
可能逐字节地调用Write
我有点害怕 - 当stream
将数据发送到服务器时?它会锁定发送每个字节吗?我应该致电flush
以确保发送所有数据吗?写入MemoryStream
而不是将整个字节数组写入stream
会更有效吗?
答案 0 :(得分:2)
您需要查看NoDelay
属性。只要这是假的(这是默认值),TcpClient就不会在每次调用Write时发送数据包。它会缓冲起来,只有在感觉时间合适时才发送完整的数据包。对SendBufferSize进行一些调整也可能会有所帮助。
NetworkStream.Flush
什么都不做。
就锁定而言 - 在你的探查器告诉你这是一个问题之前不要担心。 : - )