Frage

Ich versuche, den Stream zu verwenden. Daher verringert eine Streuung/Sammel -API die Anzahl der Kontextschalter (und die CPU -Verwendung) enorm. Verwendet diese API die LPBuffer -Win32 -API überhaupt? Gibt es eine alternative API für Streuung/Sammeln Sie I/O?

War es hilfreich?

Lösung 4

There is no way to do socket scatter/gather I/O in .NET. According to a MSFT blog post, there may be a similar API in .NET 4.5 (whatever that is...)

Andere Tipps

Wenn man sich die .NET -Quellen ansieht, scheint die akzeptierte Antwort falsch zu sein.

SocketAsyncEventArgs hat ein BufferList Attribut. Wenn das verwendet wird, anstelle der Buffer Attribut, das nur einen einzelnen zusammenhängenden Speicherblock halten kann, können Operationen als Streuung/Sammeln von DMA verwenden Socket.SendAsync(SocketAsyncEventArgs) Verwendet WSASend intern, das

Ermöglicht mehrere Send -Puffer

und Socket.SendAsync(SocketAsyncEventArgs) Verwendet WSARecv, das

Ermöglicht mehrere Empfangspuffer

Ich habe nicht die .NET 3.5 -Quellen griffbereit, aber BufferList existiert seit .NET 3.5, so dass Streuung/Sammeln möglicherweise seit .NET 3.5 unterstützt worden sein. Die minimalen Betriebssystemanforderungen für WSASEND und WSARECV sind als Windows Vista / Server 2003 dokumentiert.

NB Ich weiß nicht, welchen Stream Sie verwenden, aber NetworkStream.BeginWrite Sendet einen einzelnen Puffer an den WSaSend, sodass Sie das nicht für Streuung/Sammeln verwenden können.

I would be surprised if you could get to the scatter/gather api's from the BCL (it's for the l33t w1n32 haxx0rz, you know?), but there's always P/Invoke (which is suprisingly easy to use, I've found).

If you want to dig into the guts of the framework, there are a few ways to do it:

1) Reflector

2) MS recently opened up the source for debugging purposes, you can step into it with VS2008 if you enable the option under Debugging/Options/General

3) Koders.com seem to be hosting the framework source too:

http://www.koders.com/csharp/fidCE09E83BE706D0BD370658C3785E82D3A13FC2CE.aspx?s=flush()#L109

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top