41 votes

Appartements à un seul fil vs appartements à plusieurs threads

Double Possible:
Pourriez-vous expliquer le personnel et les MTA?

Tous les threads de pool de threads sont dans le multithread appartement.

--Comme par le MSDN

Qu'est-ce que cela signifie? Je suis vraiment intéressé à ce que la différence entre le multi vs single threaded apartment modèle est. Ou ce qui ne l'appartement du modèle signifie? J'ai lu le MSDN, et il n'a pas vraiment de sens pour moi. Je pense que j'ai peut-être une idée, mais je pensais que quelqu'un ici pourrait expliquer, dans un anglais courant.

Merci, Anthony D

Mise à jour 1

Trouvé ce Pourriez-vous expliquer le personnel et les MTA?

Quelqu'un peut-il être plus explicite?

Mise à jour 2

Je suis également à la recherche d'une réponse sur la façon dont cela s'applique à le pool de threads, et ce dont j'ai besoin pour regarder dehors pour cette raison.

56voto

Stu Mackellar Points 8605

STA (single-threaded apartment) et MTA (multi-threaded apartment) sont à faire avec COM. COM les composants peuvent être conçus pour être accessibles que par un seul thread, auquel cas ils sont hébergés dans une STA, ou ils peuvent être réalisés en interne thread-safe, et hébergé dans un MTA. Un processus peut avoir qu'un MTA, mais de nombreux STAs. Si vous êtes seulement de consommer les composants COM tout ce que vous avez vraiment besoin de savoir, c'est que vous avez pour correspondre à l'appartement de la composante ou les mauvaises choses vont arriver.

9voto

Lou Franco Points 48823

Si votre objet COM doit croire qu'il se trouve dans un environnement à thread unique, utilisez STA. Vous êtes assuré que la création et tous les appels seront effectués par le même thread. Vous pouvez utiliser en toute sécurité le stockage local Thread et vous n'avez pas besoin d'utiliser des sections critiques.

Si votre objet COM est accessible par plusieurs threads simultanément, utilisez MTA - il n'y aura pas de protecteurs mis en place.

5voto

Brian Rasmussen Points 68853

Comme d'autres l'ont souligné, cela a généralement peu d'impact sur les applications .NET.

Cependant, sachez que l'hôte de test Microsoft utilisé pour les tests unitaires est en fait implémenté dans une STA, ce qui signifie qu'il y a des limites à ce que vous pouvez faire dans le test unitaire. Par exemple, vous ne pouvez pas faire un WaitAll sur un WaitHandle dans un test unitaire si vous utilisez l'hôte de test de Microsoft.

2voto

Robert C. Barth Points 9788

Vous n'avez pas à vous en préoccuper sauf si vous faites COM-interop, auquel cas il y a des problèmes de marshaling. Il n'a aucune ramification pour .net lui-même.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X