Сколько потоков STA может сосуществовать в процессе?

StackOverflow https://stackoverflow.com/questions/4527755

Вопрос

Мне нужно несколько STA потоки внутри моего приложения ASP.NET, чтобы использовать некоторые COM составные части.

Я читал где -то внутри каждого процесса, только один STA Поток может существовать. Я закодировал образец проекта и сделал много потоков и установил их квартиру STA И они работают с COM объекты без какого -либо исключения.

Возможно ли иметь много STA потоки внутри процесса?

Это было полезно?

Решение

Если ваша программа работает со многими потоками STA, то почему вы спрашиваете, работает ли она? :) .NET позволяет вам иметь любое количество потоков STA, так что это должно работать. То, что вы читаете, может быть правдой для типичных нативных приложений только с одним основным потоком и циклом сообщения.

Другие советы

Не существует неотъемлемых ограничений на количество потоков STA, которое вы можете иметь, однако вы, вероятно, захотите наложить такой предел самостоятельно.

Если вы позволите своему приложению ASP.NET создавать дополнительные потоки STA по мере появления новых пользовательских запросов, без ограничения его, в конечном итоге количество потоков приведет к ухудшению производительности вашего приложения, поскольку количество времени, проведенного ЦП, на переключение контекста становится слишком высоким Анкет Это также делает ваше заявление намного более уязвимым для отрицания атак на обслуживание.

Вы можете рассмотреть дизайн, если бы вы установили ограничение на количество потоков STA на основе вашего оборудования или профиля пользователей, и после достижения предела внедрите некоторые объединения для повторного использования существующих потоков STA для обслуживания новых запросов.

Нет верхнего предела, кроме памяти. 32-битный процесс, как правило, несколько застенчиво из 2000 потоков, когда стеки потоков использовали все доступное адресное пространство.

Имейте в виду правила, вы не можете назвать объект, который был создан в одном STA из другого STA без маршалирования. И не забудьте о необходимом цикле сообщения, нить STA должна накачать, чтобы сохранить маршалинг и предотвратить тупик. Очевидно, что приближается к лимиту памяти, следует сильно избежать.

Там нет реального ограничения в стандартном потоке STA, но для пользовательского интерфейса есть только один «специальный» поток STA. Это может быть то, что вы читали в другом месте. В то время как большинство COMs в порядке с любым потоком STA, некоторые COMS может потребовать цикла сообщения (например, для тикания таймера), который потребует указания на поток пользовательского интерфейса или накачку сообщения.

Требуется ли цикл сообщения STA в этом случае?

http://blogs.msdn.com/b/cbrumme/archive/2004/02/02/66219.aspx

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top