Обе модели потоков
Основная причина, по которой ваш компонент помечен как поддерживающий модель потоков «Оба», - это повышение производительности, когда компонент вызывается из однопотокового апартамента (STA).
Если вы помечаете свой компонент как MTA и ваш компонент создается из STA, то ваш компонент будет создан в отдельной квартире MTA и " результирующий маршалинг между подразделениями может снизить производительность настолько, чтобы свести на нет всю работу, вложенную в создание эффективного компонента со свободными потоками ". Однако, если модель потоковой передачи вашего компонента помечена как «Оба», то она будет создана внутри квартиры объекта STA, и к ней будет осуществляться прямой доступ.
Поэтому, если вы думаете, что ваш компонент может быть вызван из STA (все COM-объекты VB6 являются STA), вы можете пометить потоковую модель как «Оба».
Хорошая статья в базе знаний о моделях потоковой передачи OLE.
Модель с бесплатными потоками
Вы можете захотеть использовать модель потока «Free», если ваш компонент использует другие компоненты, отмеченные как «Free». Если ваш компонент был помечен как «Оба», то могло произойти чрезмерное переключение квартир между компонентом «Оба», работающим в STA и MTA. Как правило, старайтесь создать компонент как можно ближе к вызывающему абоненту (то есть в той же квартире), при этом работая должным образом во всех сценариях.
Другая ситуация, которая требует пометки вашего компонента как «Свободный», - это если он явно блокирует (например, Thread.Sleep). Если компонент помечен как «Оба» и создается в STA, то компонент блокирует перекачку сообщений STA.
Другие соображения и сценарии
Если вы планируете использовать компонент в IIS, следует учесть и другие моменты. Для IIS рекомендуется "Оба". В основном, чтобы избежать проблем с блокировкой многопоточных компонентов Apartment, оперативного доступа к COM + ObjectContext и того факта, что «бесплатные» многопоточные компоненты используют контекст безопасности системы (если вам требуется доступ к контексту безопасности пользователя). См. Выбор модели потоков для компонентов в IIS для получения дополнительной информации о IIS. соображения потоковой передачи.
Также следует учитывать поддержку COM + и поведение ваших компонентов, если они запускаются в COM +, а также то, передаются ли и сохраняются ли указатели на интерфейсы.
Отличная статья - Потоки COM и архитектура приложений в приложениях COM +. Он фокусируется на COM +, но также обсуждает COM. Если у вас возник вопрос, прочтите раздел «Рекомендации по многопоточным моделям». Microsoft удалила исходную статью, поэтому я даю ссылку на копию.
person
Randy supports Monica
schedule
01.12.2009