【发布时间】:2017-03-09 15:33:47
【问题描述】:
将ArraySegment<byte> 的列表 传递给Socket.BeginReceive/SocketAsyncEventArgs 背后的原因是什么?
MSDN for the Socket.BeginReceive constructor 甚至没有正确描述第一个参数):
public IAsyncResult BeginReceive(
IList<ArraySegment<byte>> buffers,
SocketFlags socketFlags,
AsyncCallback callback,
object state
)
参数:
缓冲区
类型:System.Collections.Generic.IList<ArraySegment<Byte>>Byte类型的数组,它是接收数据的存储位置。
...
我认为主要的想法是在大对象堆上分配一个大缓冲区,然后将这个缓冲区的一部分传递给Socket.BeginReceive,以避免将小对象钉在堆周围并弄乱GC的工作。
但我为什么要向这些方法传递几个段?如果是SocketAsyncEventArgs,似乎会使这些对象的池化变得复杂,我不这样做看不出这背后的原因。
【问题讨论】:
标签: garbage-collection socketasynceventargs beginreceive