资源分配器资源分配过程

每次资源分配器从其持有者分配资源时,都会发生以下情况:

  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+ 资源分配器概念

在事务中登记资源

跟踪未分配的资源