Почему я использовал бы “Обоих” модель потоков COM вместо “Свободного”?

Используйте следующее в php.ini:

error_reporting = E_ALL | E_STRICT

Также необходимо установить Xdebug, он может выделить ошибки в ослеплении ярких цветов и распечатать полезную подробную информацию.

Никогда не позволяют никакой ошибке или уведомлению в Вашем коде, даже если это безопасно.

11
задан sharptooth 1 December 2009 в 07:19
поделиться

1 ответ

Модель с двумя потоками

Основная причина, по которой ваш компонент был помечен как поддерживающий модель потоков "Оба", - это повышение производительности, когда компонент вызывается из однопотоковой квартиры (STA).

Если вы пометите свой компонент как MTA и ваш компонент будет создан из STA, то ваш компонент будет создан в отдельном апартаменте MTA, и "результирующий межпредельный маршалинг может снизить производительность настолько, чтобы свести на нет всю затраченную работу. в создание эффективного компонента со свободными потоками ». Однако, если потоковая модель вашего компонента помечена как «Оба», то она будет создана внутри квартиры объекта STA, и к ней будет осуществляться прямой доступ.

Итак, если вы думаете, что ваш компонент может быть вызван из STA (все COM-объекты VB6 являются STA), вы можете пометить модель потоковой передачи как «Оба».

Хорошая статья в базе знаний OLE Threading Модели .

Модель свободного потока

Возможно, вы захотите использовать модель «Свободного потока», если ваш компонент использует другие компоненты, помеченные как «Свободные». Если ваш компонент был помечен как «Оба», то могло произойти чрезмерное переключение между компонентом «Оба», работающим в STA и MTA. Как правило, старайтесь создать компонент как можно ближе к вызывающему (то есть в той же квартире), при этом работая должным образом во всех сценариях.

Другая ситуация, которая требует пометки компонента как «Свободный», - это если он явно блокирует ( например, Thread.Sleep). Если компонент помечен как «Оба» и создается в STA, то компонент блокирует перекачку сообщений STA.

Другие соображения и сценарии

Если вы планируете использовать компонент в IIS, то есть другие вещи рассматривать. Для IIS рекомендуется "Оба". В основном, чтобы избежать проблем с блокировкой многопоточных компонентов Apartment, оперативного доступа к COM + ObjectContext и того факта, что «бесплатные» многопоточные компоненты используют контекст безопасности системы (если вам требуется доступ к контексту безопасности пользователя). См. Выбор модели потоков для компонентов в IIS для получения дополнительной информации о соображениях потоковой передачи в IIS.

Также следует учитывать поддержку COM + и поведение ваших компонентов, если они выполняются в COM +, и передаются ли указатели интерфейсов и хранится.

Отличная статья - Потоки COM и архитектура приложений в приложениях COM + . Он фокусируется на COM +, но также обсуждает COM. Если у вас возник вопрос, прочтите раздел «Рекомендации по модели потоковой передачи». Microsoft удалила исходную статью, поэтому я даю ссылку на копию.

20
ответ дан 3 December 2019 в 05:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: