【发布时间】:2011-09-20 21:10:36
【问题描述】:
哪个更好?
在每个之前假设这个代码:
byte[] data = Encoding.ASCII.GetBytes("Test Packet Message");
byte[] header = BitConverter.GetBytes(data.Length);
答:
clientStream.Write(header, 0, header.Length);
clientStream.Write(data, 0, data.Length);
乙:
byte[] bytes = new byte[header.Length + data.Length];
Buffer.BlockCopy(header, 0, bytes, 0, header.Length);
Buffer.BlockCopy(data, 0, bytes, header.Length, data.Length);
clientStream.Write(bytes, 0, bytes.Length);
A 的好处是不必将字节从一个数组复制到另一个数组,因此在 CPU 上更容易(客户端和服务器都必须发送和接收数据,因此 A 如果发送大量数据,该方法可能会更快。
B 的好处是只发送一个数据包。人们谈论发送单个小数据包的开销。此外,从this post 可以看出,Nagle 的算法可能会与 A 一起使用。
如果有一种方法也能完成 A 而不必将所有字节从标头和数据数组复制到字节数组,那就太好了,但我不确定这是否可能.. 似乎有一种方法可以优化它/使其更高效,但我不确定。
【问题讨论】:
标签: c#