Question

J'ai besoin de plusieurs threads STA dans mon application ASP.NET pour utiliser certains composants COM.

Je lis quelque part à l'intérieur de chaque processus, un seul thread STA peut exister. Je codé un exemple de projet et fait de nombreux fils et mis leur état appartement à STA et ils travaillent avec des objets COM sans exception.

Est-il possible d'avoir beaucoup de fils de STA l'intérieur d'un processus?

Était-ce utile?

La solution

Si votre programme fonctionne avec plusieurs threads STA, alors pourquoi demandez-vous si cela fonctionne? :) .NET vous permet d'avoir un certain nombre de threads STA, donc il faut travailler. Ce que vous lisez peut-être vrai pour les applications typiques natives avec un seul fil conducteur et une boucle de message, cependant.

Autres conseils

Il n'y a pas de limite inhérente au nombre de threads STA vous pouvez avoir, mais vous voudrez probablement d'imposer une telle limite vous-même.

Si vous permettez à votre application ASP.NET pour créer des threads supplémentaires de STA en tant que nouvelles demandes des utilisateurs arrivent, sans la limiter, à terme le nombre de threads entraînera la performance de votre application à se détériorer comme la quantité de temps passé par le CPU sur le changement de contexte devient trop élevé. Cela rend également votre application beaucoup plus vulnérables à des attaques par déni de service.

Vous pouvez envisager un design était vous définissez une limite pour le nombre de threads STA en fonction de votre matériel ou le profil de l'utilisateur, et une fois que la limite est atteinte, mettre en œuvre une mise en commun de réutilisation threads existants STA pour services de nouvelles demandes.

Il n'y a pas de limite supérieure, autre que la mémoire. Un processus 32 bits normalement un peu timide peters de 2000 fils lorsque les piles des fils ont consommé tout l'espace d'adressage disponible.

Gardez les règles à l'esprit, vous ne pouvez pas appeler un objet qui a été créé dans un STA d'un autre STA sans marshaling. Et ne pas oublier la boucle de message requis, un thread STA doit pomper pour maintenir le marshaling en vie et éviter l'impasse. De toute évidence se importe où près de la limite de mémoire devrait être fortement évitée.

Il n'y a pas de limite sur le fil standard STA, mais il n'y a qu'un seul thread STA « de spécial » pour l'interface utilisateur qui a la boucle de message. Cela peut être ce que vous lisez ailleurs. Alors que la plupart COMs sont très bien avec un fil de STA, certains COMs peuvent exiger la boucle de message (comme par minuterie à retardement) qui nécessitera pointant vers le thread d'interface utilisateur ou le pompage message.

est-STA message boucle requis dans ce cas?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top