0

我只是想确保我了解SocketAsyncEventArgs的可重用性功能。据我了解, SocketAsyncEventArgs 可以重复用于一个连接和不同的操作。所以我可以将相同的 SocketAsyncEventArgs 用于连接/发送/接收(客户端)或接受/发送/接收(服务器)?还是我仍然需要为不同的操作使用新的 SocketAsyncEventArgs?

而且我也知道 SocketAsyncEventArgs 主要是为服务器端的高性能而设计的。因此,正确的用途是在服务器上拥有一个 SocketAsyncEventArgs 池,为每个连接保存一个 SocketAsyncEventArgs。并将 SocketAsyncEventArgs 重用于连接上的不同操作。在客户端,您可以只使用一个 SocketAsyncEventArgs。

我理解对吗?不幸的是,我在文档中没有找到明确的说明。

4

1 回答 1

0

回答我自己的问题: SocketAsyncEventArgs 替换了 Begin.../End... 方法所需的 IAsyncResult。因此,对于服务器,您仍然必须有一个用于侦听的 Socket。但是现在每个连接的客户端都有一个 SocketAsyncEventArg 而不是 Socket。SocketAsyncEventArgs 是可重用的,因为它可用于具有相同连接客户端的所有操作。改进之处在于,对于连接的客户端上的每个操作操作,您都没有 IAsyncResult。这降低了 GC 的压力。

于 2019-12-04T08:56:49.167 回答