C# 套接字发送与开始发送性能

本文关键字:性能 开始 套接字 | 更新日期: 2023-09-27 17:57:15


所以我明白发送是同步的,而开始发送是异步的。我听说套接字发送方法的数据传输速度比BeginSend更快(注意:我不是在谈论CPU性能,而只是在谈论发送和接收数据包延迟)。谁能告诉我这是真的还是假的?我所指的文章,我听到同步数据传输是这样的。如果这是真的,有没有办法解决它?或者这就是使用异步数据传输时的情况吗?

非常感谢您的帮助。

文章正文:

这两种通信形式都是传输数据的一种方式。区别在于数据传输的格式。异步通信是 PC 通信最广泛使用的通信方法,通常用于电子邮件应用程序、Internet 访问和异步 PC 到 PC 通信。通过异步通信,数据一次传输一个字节,每个字节包含一个起始位、八个数据位和一个停止位,因此总共产生十位。对于异步通信,由于发送的每个字节都包含两个额外的位(开始位和停止位),因此会产生大量的开销,因此性能会大幅下降。

同步通信是更有效的通信方法。CQ的连接解决方案通过同步通信方法进行通信。通过同步通信,数据作为大型数据块的帧传输,而不是庞大的单个字节。同步的一个优点是控制信息很容易插入每个块的开头和结尾,以确保恒定的定时或同步。同步的另一个优点是它比异步更有效。例如,56 Kbps 拨号同步线路每秒可传输 7000 字节 (56000/8),而 56 Kbps 拨号异步线路每秒只能传输 5600 字节 (56000/10)。当传输大量信息时,这将转化为速度和性能的显着提高。

C# 套接字发送与开始发送性能

我听说套接字发送方法的数据传输速度比开始发送更快

不对。

至于文章文本。你说的是两件截然不同的事情。计算机程序中的异步网络连接和异步方法。

这当然不是真的。本文讨论网络连接类型上下文中的同步和异步。但是,它与使用套接字发送数据的方式无关。在.Net中,同步和异步只是意味着方法将如何阻止(同步)和非阻止(异步),与数据传输速度无关。使用的任何同步和异步方法的延迟都是相同的。

我要

说的最关键的是,同步套接字方法更容易编程,并且可以在单个包装器函数中完成。(我假设您将从 Socket 类继承并添加自定义错误处理、日志记录等以环绕发送和接收)

对于异步,您将需要至少两个函数和另一个类或结构(StateObject)来跟踪您要传输的内容。

您当然可以使用匿名委托技术掩盖回调方法的存在,但这不会改变您的代码理解起来会稍微复杂一点的事实(和维护)

我一直无法准确地对函数进行计时,但我已经看到,对于较小的字节大小(<4K),同步似乎更快,对于较大的块(> 8K),异步似乎更好。也许,当您使用 ASync 接收更大的缓冲区时,异步函数已经继续进行,并在您啃食以前收到的块时为您提供了更多的字节。