2011-05-19 59 views
1


所以我明白发送是同步的而BeginSend是异步的。我听说套接字发送方法对于数据传输来说更快,然后BeginSend(注意:我不是在谈论CPU性能,而只是发送和接收数据包延迟)。任何人都可以告诉我,如果这是真的或不?这篇文章我指的是在哪里听到同步数据传输,如下所示... 如果它是真的,是否有解决方法?或者,这就是使用异步数据传输时的情况。C#套接字发送vs BeginSend性能

非常感谢您的帮助。

文章文本:

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

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

+1

您应该添加一个链接回原始文章(假设它在线)。互联网业力比其他任何事情更多。 – 2011-05-19 14:24:36

+0

http://www.cq-comm.com/faq.htm – Guillaume 2011-05-19 14:59:04

+1

听起来我喜欢这篇文章谈论的是较低的传输层(通过物理连接传输比特的特定封装)而不是套接字层,这是如何形成数据包并将其发送到底层网络驱动程序的方式。 – 2011-05-19 15:08:01

回答

4

我听说的套接字发送方法是更快的数据传输则BeginSend

事实并非如此。

至于文章文字。你在谈论两件完全不同的事情。计算机程序中的异步网络连接和异步方法。

+0

哈哈,你的答案可能是“!AsyncSocket.IsFaster”;) – 2011-05-19 14:17:15

0

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

0

我想说的最重要的事情是同步套接字方法很容易编程,并且可以在一个包装函数中完成。 (我假设你将继承Socket类并添加自定义的错误处理,日志记录等以环绕发送和接收)

在异步情况下,您至少需要两个函数和另一个类或结构一个StateObject)来跟踪你想传输的内容。

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

我一直没能准确的时间函数,但我已经看到,对于较小的字节大小(< 4K),同步似乎更快,对于较大的块(> 8K),异步似乎更好。也许,当你使用ASync来接收更大的缓冲区时,Async func已经提前,并且在你啃过以前接收到的块时得到了更多的字节。