资源分配器资源分配过程

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

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

在事务 中登记资源

跟踪未分配的资源