オブジェクト プールによるパフォーマンスの向上

オブジェクト プールは、特定の状況で非常に効果的な場合があり、パフォーマンスが大幅に向上します。 オブジェクトを再利用して最大限の利点を得る一般的な考え方は、可能な限り多くのリソースをプールし、実際に実行された作業から初期化を考慮し、デプロイ時に実際のハードウェアにプールの特性を管理的に調整することです。 つまり、次の手順に従って進む必要があります。

  1. クライアントの代わりに実際の作業を行う前提条件として、クライアントに対して実行される高価な初期化とリソースの取得を考慮に入れ、オブジェクトを記述します。 可能な限り多くのリソースをプールに書き込み、オブジェクトによって保持され、クライアントがプールからオブジェクトを取得するときにすぐに使用できます。
  2. 使用可能なハードウェア リソースで最適なバランスを実現するためにプールを管理的に構成します。通常は、クライアントアクセスの高速化とオブジェクトの使用と引き換えに、特定のサイズのプールを維持するために専用のメモリを取引します。 特定の時点で、プールによってリターンが減少し、特定のコンポーネントによるリソース使用量を制限しながら十分なパフォーマンスを得る可能性があります。

実際の作業の実行またはリソースの取得

クライアントに対して特定の作業を行う前に、オブジェクトの使用時間のかなりの部分がリソースの取得または初期化に費やされる、短時間かつ迅速に使用するコンポーネントがある場合は、オブジェクト プールを使用するコンポーネントを記述する可能性が高い可能性があります。

コンポーネントを記述して、オブジェクトのコンストラクターで、すべてのクライアントに対して可能な限り均一な時間のかかる作業 (1 つ以上の接続の取得、スクリプトの実行、ファイルまたはネットワークを通した初期化データのフェッチなど) を実行できます。 これは、このようなすべてのリソースをプールする効果があります。 何らかの作業を実行するために必要なリソースと汎用的な状態の組み合わせをプールしています。

この状況では、クライアントはプールからオブジェクトを取得すると、それらのリソースをすぐに使用できます。 通常、オブジェクトを使用してデータのプッシュまたはプルを行い、小さな作業単位を実行します。その後、オブジェクトは IObjectContext::SetComplete または IObjectContext::SetAbort を呼び出して戻します。 このような迅速な使用パターンでは、プールによって優れたパフォーマンス上の利点が得られる。 ステートレス自動トランザクション プログラミング モデルのシンプルさを十分に活用できる一方で、従来のステートフル コンポーネントと同じパフォーマンスを実現できます。

ただし、クライアントがオブジェクトを呼び出すたび長い時間オブジェクトを使用する場合、プールは意味がありません。 使用時間が初期化時間に対して増加する場合、得られる速度の利点は限界です。 アクティブなオブジェクトのプールを保持するために必要なメモリのコストを正当化できない可能性があるリターンが減少します。

複数のクライアント間でのコストの共有

初期化を考慮する際のバリエーションは、プールを使用して、コストの高いリソースを取得するコストを統計的に償却できるという方法です。 取得または初期化のヒットを 1 回受け取り、そのオブジェクトを再利用すると、その有効期間中にオブジェクトを使用しているすべてのクライアントでそのコストを共有します。 重い構築時間は、オブジェクトごとに 1 回だけ発生します。

オブジェクトの事前割り当て

0 以外の最小プール サイズを指定した場合は、アプリケーションの起動時に作成およびプールされるオブジェクトの最小数が、アプリケーションを呼び出すクライアントに対応します。

プール管理でのリソース使用の管理

最大プール サイズを使用して、リソースの使用方法を非常に正確に管理できます。 たとえば、特定の数のデータベース接続のライセンスを取得している場合は、いつでも開いている接続の数を制御できます。

クライアントの使用パターン、オブジェクトの使用特性、メモリや接続などの物理リソースを考慮すると、パフォーマンス チューニングを行う際に最適なバランス ポイントが見つかりそうになります。 オブジェクトをプールすると、特定のポイントの後に減少する戻り値が生成されます。 必要なパフォーマンスのレベルを決定し、それを実現するために必要なリソースとのバランスを取ります。

オブジェクト プールを構成するときにパフォーマンスのチューニングを容易にするために、アプリケーション内のコンポーネントのオブジェクト統計を監視できます。 詳細については、「オブジェクト統計の 監視」を参照してください

コンポーネントのパフォーマンスJIT-Activated向上

オブジェクト プールは 、COM+ Just-In-Time アクティブ化サービスで非常にうまく機能 します。 JIT でアクティブ化されているオブジェクトをプールすることで、オブジェクトの再アクティブ化を高速化できます。 再アクティブ化のコストを軽減しながら、JIT ライセンス認証によってチャネルを開いた保持する利点があります。 この場合、プールを使用して、参照がアクティブなオブジェクトに割り当てるメモリの量を制御できます。

JIT によってアクティブ化されたコンポーネントがトランザクションのときにプールされる可能性が最も高い。 オブジェクト プールは、トランザクション コンポーネントを処理するために最適化されています。 詳細については、「トランザクション オブジェクトの プール」を参照してください

COM+ オブジェクト コンストラクター文字列

オブジェクトの有効期間と状態の制御

オブジェクト プールのしくみ

トランザクション オブジェクトのプール

プール可能オブジェクトの要件