バージョン 3.5 のソケット パフォーマンスの強化Socket Performance Enhancements in Version 3.5

非同期ネットワーク I/O を利用して最高のパフォーマンスを達成するために、バージョン 3.5 で、System.Net.Sockets.Socket クラスが機能強化されました。The System.Net.Sockets.Socket class has been enhanced in Version 3.5 for use by applications that use asynchronous network I/O to achieve the highest performance. Socket クラスの機能強化の一環として、一連の新しいクラスが追加されました。これが提供する代替非同期パターンは、目的に特化した高パフォーマンスのソケット アプリケーションで利用できます。A series of new classes have been added as part of a set of enhancements to the Socket class that provide an alternative asynchronous pattern that can be used by specialized high-performance socket applications. この機能強化は、高いパフォーマンスを必要とするネットワーク サーバー アプリケーションのために設計されたものです。These enhancements were specifically designed for network server applications that require high performance. あるアプリケーションで、機能強化された非同期パターンを排他的に、言い換えると、アプリケーションの高負荷領域 (大量のデータを受け取るときなど) のみで使用できます。An application can use the enhanced asynchronous pattern exclusively, or only in targeted hot areas of their application (when receiving large amounts of data, for example).

クラスの拡張機能Class Enhancements

この機能強化の主な特徴は、高ボリュームの非同期ソケット I/O 中、オブジェクトの割り当てと同期が繰り返されることを避けることにあります。The main feature of these enhancements is the avoidance of the repeated allocation and synchronization of objects during high-volume asynchronous socket I/O. 非同期ソケット I/O のために Socket クラスにより現在実装されている開始/終了設計パターンでは、非同期ソケット操作のたびに、System.IAsyncResult オブジェクトを割り当てる必要があります。The Begin/End design pattern currently implemented by the Socket class for asynchronous socket I/O requires a System.IAsyncResult object be allocated for each asynchronous socket operation.

新しい Socket クラス機能強化では、非同期ソケット操作は、アプリケーションにより割り当てられ、保守管理される再利用可能 System.Net.Sockets.SocketAsyncEventArgs クラス オブジェクトによって記述されます。In the new Socket class enhancements, asynchronous socket operations are described by reusable System.Net.Sockets.SocketAsyncEventArgs class objects allocated and maintained by the application. 高パフォーマンスのソケット アプリケーションは、維持する必要があるオーバーラップしたソケット操作の量を効率的に認識します。High-performance socket applications know best the amount of overlapped socket operations that must be sustained. アプリケーションは SocketAsyncEventArgs オブジェクトを必要な数だけ作成できます。The application can create as many of the SocketAsyncEventArgs objects that it needs. たとえば、サーバー アプリケーションが、入ってくるクライアント接続レートに対応するために、15 のソケット受け取り操作を常に未処理状態にしておく必要がある場合、その目的のために前もって 15 の再利用可能 SocketAsyncEventArgs オブジェクトを割り当てることができます。For example, if a server application needs to have 15 socket accept operations outstanding at all times to support incoming client connection rates, it can allocate 15 reusable SocketAsyncEventArgs objects in advance for that purpose.

このクラスで非同期ソケット操作を実行するパターンは次の手順で構成されます。The pattern for performing an asynchronous socket operation with this class consists of the following steps:

  1. 新しい SocketAsyncEventArgs コンテキスト オブジェクトを割り当てるか、アプリケーション プールから空きコンテキスト オブジェクトを入手します。Allocate a new SocketAsyncEventArgs context object, or get a free one from an application pool.

  2. コンテキスト オブジェクトのプロパティをこれから実行する操作 (コールバック デリゲート メソッドやデータ バッファーなど) に設定します。Set properties on the context object to the operation about to be performed (the callback delegate method and data buffer, for example).

  3. 適切なソケット メソッド (xxxAsync) を呼び出し、非同期操作を開始します。Call the appropriate socket method (xxxAsync) to initiate the asynchronous operation.

  4. 非同期ソケット メソッド (xxxAsync) がコールバックで true を返した場合、コンテキスト プロパティに完了状態を問い合わせます。If the asynchronous socket method (xxxAsync) returns true in the callback, query the context properties for completion status.

  5. 非同期ソケット メソッド (xxxAsync) がコールバックで false を返した場合、操作は非同期で完了しています。If the asynchronous socket method (xxxAsync) returns false in the callback, the operation completed synchronously. コンテキスト プロパティに操作結果が問い合わされることがあります。The context properties may be queried for the operation result.

  6. 別の操作でコンテキストを再利用するか、プールに戻すか、破棄します。Reuse the context for another operation, put it back in the pool, or discard it.

新しい非同期ソケット操作コンテキスト オブジェクトの有効期間は、アプリケーション コードの参照と非同期 I/O の参照により決定されます。The lifetime of the new asynchronous socket operation context object is determined by references in the application code and asynchronous I/O references. 非同期ソケット操作メソッドの 1 つにパラメーターとして送信された後、非同期ソケット操作コンテキスト オブジェクトの参照をアプリケーションが維持する必要はありません。It is not necessary for the application to retain a reference to an asynchronous socket operation context object after it is submitted as a parameter to one of the asynchronous socket operation methods. 完了コールバックが戻るまで、参照状態が維持されます。It will remain referenced until the completion callback returns. ただし、コンテキスト オブジェクトの参照をアプリケーションが維持することには、将来の非同期ソケット操作で再利用できるため、利便性があります。However it is advantageous for the application to retain the reference to the context object so that it can be reused for a future asynchronous socket operation.

関連項目See also