Глядя на источники .net, принятый ответ кажется неправильным.
SocketAsyncEventArgs
имеет атрибут BufferList
. Когда это используется, вместо атрибута Buffer
, который может содержать только один непрерывный блок памяти, операции могут использовать DMA "разброс / сбор", поскольку Socket.SendAsync(SocketAsyncEventArgs)
использует WSASend
внутренне, это
позволяет указывать несколько буферов отправки, что делает его применимым к типу ввода / вывода для разброса / сбора
и Socket.SendAsync(SocketAsyncEventArgs)
использует WSARecv
, что
позволяет указывать несколько приемных буферов, что делает его применимым к типу ввода / вывода для разброса / сбора
У меня нет источников .net 3.5, но BufferList
существует с .net 3.5, поэтому сборка / сборка могла поддерживаться начиная с .net 3.5. Минимальные требования к ОС для WSASend и WSARecv задокументированы как Windows Vista / Server 2003.
N.B. Я не знаю, какой поток вы используете, но NetworkStream.BeginWrite
отправляет один буфер в WSASend, поэтому вы не можете использовать его для разброса / сбора.