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