Поделиться через


Процесс распределения ресурсов диспенсера ресурсов

Каждый раз, когда депенсер ресурсов выделяет ресурс от своего владельца, происходит следующее:

  1. Диспенсер ресурсов объявляет идентификатор типа ресурса (RESTYPID), описывающий тип необходимого ресурса.

  2. Диспенсер ресурсов вызывает метод IHolder владельца::AllocResource, передав этот RESTYPID.

  3. Владелец создает список кандидатов из доступных ресурсов. Кандидаты — это ресурсы, которые либо не включены в транзакцию, либо уже включены в транзакцию вызывающего объекта.

  4. Эти кандидаты по отдельности передаются в метод IDispenserDriver::RateResource, где они оцениваются (в масштабе от 0 до 100), насколько хорошо ресурс кандидата соответствует требуемому RESTYPID.

  5. Владелец выбирает ресурс, который расценки диспенсера ресурсов является самым высоким.

  6. Диспенсер ресурсов может завершить цикл оценки рано, назначив кандидату оценку ресурсов 100 (идеально подходит). Оценка 100 обычно будет зарезервирована для потенциальных ресурсов, которые уже должным образом включены, если только диспенсер ресурсов не заключает, что зачисление является недорогой операцией. Если все ресурсы-кандидаты (если таковые имеются) оцениваются 0 (непригодные для использования), создается новый ресурс путем вызова IDispenserDriver::CreateResource.

  7. Если выбранный ранее ресурс еще не включен в транзакцию вызывающего объекта, вызывается метод диспенсера ресурса IDispenserDriver ::EnlistResource .

  8. Вызов метода AllocResource возвращается в диспенсер ресурсов с указанным ресурсом.

Основные понятия диспенсера ресурсов COM+

Добавление ресурса в транзакцию

Отслеживание не выделенных ресурсов