Await/Async or SocketAsyncEventArgs?

本文关键字:SocketAsyncEventArgs or Async Await | 更新日期: 2023-09-27 17:58:54

所以我已经准备好用SocketAsyncEventArgs和socket.***异步方法编写了一个tcp服务器。但我确实喜欢使用Stream.ReadAsyncStream.WriteAsync方法编写代码的await/async方式。

性能/内存方面有什么不同吗?还是我只是在语法上有所不同?

Await/Async or SocketAsyncEventArgs?

使用socketasynceventargs的优点是减少垃圾收集器的压力,并将套接字的缓冲区分组以防止内存不足异常。

通过使用SocketAsyncEventArgs池,您可以消除为每次读写调用创建和收集IAsyncResult的需要。

其次,可以为每个SocketAsyncEventArgs分配一个大字节[]块的一部分。这样可以防止内存碎片,从而有助于减少内存占用。尽管从技术上讲,这也可以通过Begin/End调用来完成,但更容易的是永久地为每个SocketAsyncEventArgs分配自己的缓冲区,而不是每次使用Begin/Eend方法调用读或写时都分配一个块。

最后一个重要的区别是,根据MSDN Library的说法,Begin/End Send方法可能会在套接字缓冲区已满时阻塞。SocketAsyncEventArgs不会阻塞,相反,根据套接字缓冲区中的空间大小,只会写入一定数量的字节,回调将指定写入的字节数。

除非是边缘案例,否则这些优势实际上并不明显。除非您遇到指定的任何一个问题,否则我建议您选择最舒适、最可维护的问题。

相关文章:
  • 没有找到相关文章