【发布时间】:2020-12-24 11:43:10
【问题描述】:
哪一个比另一个快?我正在构建一个服务器客户端应用程序,但我不确定哪个更快。我可以顺利地发送和接收数据,但我想要更快的通信。
【问题讨论】:
-
我相信 Socket 是一个更基本的实现,所以你开箱即用的东西更少,但我不知道你真的会有那么多问题,取决于你如何使用它,NetworkSteam 可能内置了更多优化。也许同时运行两者并使用计时器进行一些测试,看看什么最适合您。
-
网络流稍慢,因为它在 TX 端获取 TCP 数据并放入流中,而 Rx 从流中移除。 TCP 最大传输块为 1500 字节。但是网络流消除了组合使用 TCP 时需要的块的操作。所以两者的速度是非常接近的。
-
您可以放心地忽略@jdweng 的这个错误陈述:“网络流消除了组合块的操作”。所有
Stream对象,包括NetworkStream,都具有与TCPSocket相同的面向流的行为,并且在所有情况下都没有自动“组合块”。无论您使用Socket还是NetworkStream,您的代码都需要准备好接收从 1 字节到已发送但尚未接收的总字节数的任何位置,然后将接收到的字节重新组合成程序所需的任何有用排列. -
关于“哪个更快”的问题,您需要知道的一切都在这里:Which is faster?。事实是,计算机本身的运行速度比网络连接的速度要快几个数量级,所以只要你不完全搞砸代码,任何实现都会“足够快”。如果您“想要更快的通信”,请获得更快的网络连接。
标签: c# sockets networkstream