我正在尝试使用.NET中的Stream.BeginWrite异步I/ many来处理具有许多短消息的高吞吐量情况。因此,分散/聚集API将极大地减少上下文切换的数量(和CPU使用率)。此接口是否使用LPBUFFERS Win32接口?是否有用于分散/聚集I/O的替代API?
发布于 2009-07-13 10:00:00
根据微软的一篇博客文章,在.NET 4.5中可能有一个类似的.NET (不管是什么……)
发布于 2015-06-01 12:05:56
看看.net的源代码,公认的答案似乎是错误的。
SocketAsyncEventArgs有一个BufferList属性。当使用这种方法时,操作可以使用散布/聚集Buffer属性,因为Socket.SendAsync(SocketAsyncEventArgs)在内部使用WSASend,
允许指定多个发送缓冲区,使其适用于分散/聚集类型的I/O
Socket.SendAsync(SocketAsyncEventArgs)使用的是WSARecv,
允许指定多个接收缓冲区,使其适用于分散/聚集类型的I/O
我手头没有.net 3.5的源代码,但是BufferList从.net 3.5开始就存在了,所以从.net 3.5开始可能就支持scatter/gather了。WSASend和WSARecv的最低操作系统要求记录为Windows Vista /Server2003。
注意:我不知道你使用的是什么流,但是NetworkStream.BeginWrite向WSASend发送了一个缓冲区,所以你不能用它来分散/聚集。
发布于 2008-09-22 13:29:08
如果你能从BCL获得分散/聚集api,我会很惊讶(它是用于l33t w1n32 haxx0rz的,你知道吗?),但是总是有P/Invoke (我发现它非常容易使用)。
https://stackoverflow.com/questions/114847
复制相似问题