gpt4 book ai didi

c# - 等待/异步或 SocketAsyncEventArgs?

转载 作者:太空宇宙 更新时间:2023-11-03 11:08:40 26 4
gpt4 key购买 nike

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

在性能/内存方面是否有任何差异,或者我只是在语法上有所不同?

最佳答案

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

通过使用 SocketAsyncEventArgs 池,您无需为每次读取和写入调用创建和收集 IAsyncResult。

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

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

除非是边缘情况,否则优势真的不明显。除非您遇到指定的任何一个问题,否则我建议您选择对您来说最舒适和可维护的问题。

关于c# - 等待/异步或 SocketAsyncEventArgs?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14856990/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com