2

多くの短いメッセージを含む高スループットの状況で、.NET で Stream.BeginWrite Async I/O API を使用しようとしています。そのため、スキャッター/ギャザー API は、コンテキスト スイッチ (および CPU 使用率) の数を大幅に削減します。この API は LPBUFFERS Win32 API を使用しますか? Scatter/Gather I/O の代替 API はありますか?

4

4 に答える 4

2

.net ソースを見ると、受け入れられた答えは間違っているようです。

SocketAsyncEventArgs属性を持っていBufferListます。これを使用すると、メモリの 1 つの連続したブロックのみを保持できる属性の代わりに、内部で使用Bufferされるスキャッター/ギャザー DMA を操作で使用できます。Socket.SendAsync(SocketAsyncEventArgs)WSASend

複数の送信バッファを指定できるため、スキャッター/ギャザー タイプの I/O に適用できます。

Socket.SendAsync(SocketAsyncEventArgs)使用しWSARecv

複数の受信バッファを指定できるため、スキャッター/ギャザー タイプの I/O に適用できます。

手元に .net 3.5 のソースはありませんが、.net 3.5BufferListから存在するため、スキャッター/ギャザーは .net 3.5 からサポートされている可能性があります。WSASend および WSARecv の最小 OS 要件は、Windows Vista / Server 2003 として文書化されています。

注意:使用しているストリームはわかりませんがNetworkStream.BeginWrite、単一のバッファを WSASend に送信するため、それをスキャッタ/ギャザリングに使用することはできません。

于 2015-06-01T04:05:56.297 に答える
1

BCLからスキャッター/ギャザーAPIにアクセスできれば驚きますが(l33t w1n32 haxx0rz用です)、常にP / Invokeがあります(これは驚くほど使いやすいですが、私は見つけました)。

于 2008-09-22T13:29:07.647 に答える
0

フレームワークの根幹を掘り下げたい場合は、いくつかの方法があります。

1) リフレクター

2) MS は最近、デバッグ目的でソースを公開しました。Debugging/Options/General でオプションを有効にすると、VS2008 でステップ インできます。

3) Koders.com もフレームワーク ソースをホストしているようです。

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

于 2008-09-22T14:29:23.803 に答える
-2

.NET でソケット スキャッター/ギャザー I/O を実行する方法はありません。MSFT のブログ投稿によると、.NET 4.5 に同様の API がある可能性があります (それが何であれ...)。

于 2009-07-13T09:59:59.513 に答える