所以我已经编写了一个带有SocketAsyncEventArgs
和socket。***异步方法的tcp服务器。但我确实喜欢使用await/async
和Stream.ReadAsync
方法编写代码的Stream.WriteAsync
方式。
性能/内存是否存在差异,或者我只是在语法上有所区别?
答案 0 :(得分:2)
使用socketasynceventargs的优点是减少垃圾收集器的压力,并保持套接字的缓冲区分组以防止内存不足。
通过使用SocketAsyncEventArgs池,您可以消除为每次读写调用创建和收集IAsyncResult的需要。
其次,每个SocketAsyncEventArgs都可以分配一个大byte []块的一部分。这可以防止内存碎片,这有助于减少内存占用。虽然从技术上讲也可以使用Begin / End调用来完成,但是每次使用Begin / End方法调用读取或写入时,更容易永久地为每个SocketAsyncEventArgs分配自己的缓冲区而不是分配块。
最后一个重要的区别是,根据MSDN Library,开始/结束发送方法可能会在套接字缓冲区已满时阻塞。 SocketAsyncEventArgs不会阻塞,相反,根据套接字缓冲区中的空间量,只会写入一定量的字节,回调将指定写入的字节数。
除非是边缘情况,否则优点确实不明显。除非您遇到任何指定的问题,否则我建议您选择最适合您的方式。