リソース ディスペンサー リソース割り当てプロセス

リソース ディスペンサーが所有者からリソースを割り当てるたびに、以下の処理が行われます。

  1. リソース ディスペンサーは、必要なリソースの種類を記述するリソース タイプ識別子 (RESTYPID) を宣言します。

  2. リソース ディスペンサーは、所有者の IHolder::AllocResource メソッドを呼び出し、この RESTYPID を渡します。

  3. 所有者は、使用可能なリソースから候補リストを生成します。 候補は、トランザクションに参加していないリソース、または呼び出し元オブジェクトのトランザクションに既に参加しているリソースです。

  4. これらの候補は IDispenserDriver::RateResource メソッドに個別に渡されます。このメソッドは、候補リソースが目的の RESTYPID とどの程度一致するかによって評価されます (0 ~ 100 のスケール)。

  5. 所有者は、リソース ディスペンサーの評価が最も高いリソースを選択します。

  6. リソース ディスペンサーは、候補にリソース評価 100 (完璧に適合) を割り当てることにより、評価ループを早期に終了できます。 通常、評価 100 は、参加がコストの低い処理であるとリソース ディスペンサーが判断しない限り、既に適切に参加している候補リソース用に予約されています。 すべての候補リソース (存在する場合) の評価が 0 (使用不可) の場合、IDispenserDriver::CreateResource を呼び出すことによって新しいリソースが作成されます。

  7. 以前に選択されたリソースが呼び出し元オブジェクトのトランザクションにまだ参加していない場合、リソース ディスペンサーの IDispenserDriver::EnlistResource メソッドが呼び出されます。

  8. AllocResource メソッドの呼び出しは、参加済みリソースを含むリソース ディスペンサーに戻ります。

COM+ リソース ディスペンサーの概念

トランザクションへのリソースの参加

未割り当てリソースの追跡