C# TCP中哪种发送消息的方法更可取?

C# TCP中哪种发送消息的方法更可取?,c#,networking,tcp,tcpclient,C#,Networking,Tcp,Tcpclient,我正在用C#制作一个TCP客户机/服务器应用程序,我不知道在通过网络发送消息时,在这两种风格之间使用什么更好 我遇到的第一种样式是将消息转换为字节数组,并使用NetworkStream.Write(*)方法将其写入TcpClient实例的NetworkStream void StyleOne(string msg) { TcpClient client = new TcpClient(); client.Connect(ip, port);

我正在用C#制作一个TCP客户机/服务器应用程序,我不知道在通过网络发送消息时,在这两种风格之间使用什么更好

我遇到的第一种样式是将消息转换为字节数组,并使用
NetworkStream.Write(*)
方法将其写入TcpClient实例的NetworkStream

void StyleOne(string msg)
{
            TcpClient client = new TcpClient();
            client.Connect(ip, port);
            NetworkStream nwStream = client.GetStream();
            byte[] bytesToSend = ASCIIEncoding.ASCII.GetBytes(msg);

            nwStream.Write(bytesToSend, 0, bytesToSend.Length);
            nwStream.Flush();
            client.Close();
}
我遇到的另一种风格是将TcpClient实例的NetworkStream传递给StreamWriter,然后使用
StreamWriter.Write()
方法将消息写入流

void StyleTwo(string msg)
{
            TcpClient client = New TcpClient(ip, port);
            StreamWriter writer = New StreamWriter(client.GetStream());
            writer.Write(msg);
            writer.Flush();
            client.Close();
}

如果通过网络发送的消息最多为一兆字节,那么这两个实例中哪一个在内存、速度和性能方面更有效?

StreamWriter实例始终使用相同的编码(您可以在其构造函数中指定),并且有一些方便的方法将不同类型的数据写入流

在第一个示例中,您或多或少地做了
StreamWriter
在后台所做的事情:将编码和写入数据应用于底层流


如果您必须发送多个数据位(采用相同的编码),使用
StreamWriter
将产生更干净的代码。对于单个
字符串
我认为你采用哪种方法并不重要。

第一种方法更好,因为你知道编码。Ascii编码将删除不可打印的字符。@jdweng-Ascii包含不可打印的字符,它们可以(而且必须)通过TCP传输。这不是Ascii。它是二进制的,对二进制数据使用编码会损坏数据。必须发送字节数组或压缩(如64位字符串)。因此,基本上,它们在功能和效率方面是相同的?如果我使用这个
StreamWriter writer=newstreamwriter(client.GetStream(),ascienceoding.ASCII)
创建一个
StreamWriter
的实例,它将与第一个代码片段一样吗?内存、速度等方面没有差别吗?@ReiSchneider总是有差别的,自己应用编码的开销会少一点。我确实认为L.B是想帮上忙,因为很多人倾向于优化性能,而没有意识到他们的代码正在变得一团糟。如果这里不是这样的话,就不要把它当作个人的事情:)