Pergunta

Estou tentando usar o fluxo. Como tal, uma API de dispersão/coleta reduzirá o número de interruptores de contexto (e o uso da CPU) tremendamente. Esta API usa a API LPBUFERS WIN32? Existe uma API alternativa para dispersão/reunir E/S?

Foi útil?

Solução 4

Não há como fazer o soquete dispersão/reunir E/S no .NET. De acordo com uma postagem no blog da MSFT, pode haver uma API semelhante no .NET 4.5 (seja lá o que for ...)

Outras dicas

Olhando para as fontes do .NET, a resposta aceita parece estar errada.

SocketAsyncEventArgs tem um BufferList atributo. Quando isso é usado, em vez do Buffer atributo que só pode conter um único bloco de memória contíguo, as operações podem usar a dispersão/reunir DMA, como Socket.SendAsync(SocketAsyncEventArgs) usos WSASend internamente, isso

Permite que vários buffers de envio sejam especificados, tornando -o aplicável ao tipo de dispersão/reunião de E/S

e Socket.SendAsync(SocketAsyncEventArgs) usos WSARecv, este

Permite que vários buffers de recebimento sejam especificados, tornando -o aplicável ao tipo de dispersão/reunião de E/S

Eu não tenho as fontes .NET 3.5 à mão, mas BufferList Existe desde o .NET 3.5, portanto, a dispersão/coleta pode ter sido suportada desde o .NET 3.5. Os requisitos mínimos do sistema operacional para o WSASEND e o WSARECV existem estão documentados como Windows Vista / Server 2003.

NB Eu não sei qual fluxo você está usando, mas NetworkStream.BeginWrite envia um único buffer para o WSASEND, para que você não possa usá -lo para dispersão/coleta.

Eu ficaria surpreso se você pudesse chegar às APIs dispersas/obtidas do BCL (é para o L33T W1N32 HAXX0RZ, você sabe?), Mas sempre há P/Invoke (o que é surpreendentemente fácil de usar, eu descobri).

Se você quiser cavar as tripas da estrutura, existem algumas maneiras de fazê -lo:

1) refletor

2) A MS abriu recentemente a fonte para fins de depuração, você pode entrar com ele com o VS2008 se ativar a opção em depuração/opções/general

3) Koders.com parece estar hospedando a fonte da estrutura também:

http://www.koders.com/csharp/fidce09e83be706d0bd370658c3785e82d3a13fc2ce.aspx?s=flush(C.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top