2009-08-18 5 views

Répondre

9

Vous devez faire attention à la modification de la taille du pool de threads. Il ya juste un pool de threads système fixe, utilisé par toutes sortes de choses. Le rendre trop petit pourrait causer des problèmes dans des domaines que vous ne pensiez même pas utiliser.

Si vous souhaitez disposer d'un pool de threads relativement petit pour une tâche spécifique, vous devez utiliser un pool séparé. Il existe plusieurs pools de tierces parties - j'en ai un assez ancien dans le cadre de MiscUtil, mais il devrait être assez bon pour les cas d'utilisation simples. Je suis sûr que vous pouvez trouver plus avancé si vous regardez.

Il est dommage qu'il n'y ait pas encore de ThreadPool instanciable dans le framework. Je ne me souviens pas si Extensions Parallèles en fournir un, mais je ne pense pas que ce sera le cas.

+0

Les extensions parallèles dans .NET 4.0 utiliseront réellement le ThreadPool standard de la bibliothèque de classes de base. Ils ne fourniront pas les leurs. (La classe ThreadPool de BCL a été améliorée dans .NET 4 pour ajouter de nombreuses fonctionnalités requises pour que les extensions parallèles fonctionnent efficacement, ce qui à son tour l'améliore de plusieurs manières: par exemple, il a un meilleur planificateur que le .NET 3.5 ThreadPool.) –

+0

@Reed: Oui, je connaissais le bit normal de PFX en utilisant le pool de threads du système ... Je ne savais pas s'il y en avait un nouveau qui pourrait aussi être créé. Et bien. –

4
ThreadPool.SetMaxThreads() 
+0

Existe-t-il un autre moyen non statique? Cela ne rendra-t-il pas tous les ThreadPools de cette taille? Je veux seulement qu'une seule instance d'un ThreadPool ait une taille particulière. – DLauer

+2

Il n'y a qu'un seul ThreadPool BCL par processus. Si vous voulez un pool de threads pour votre scénario, vous devez trouver une bibliothèque tierce. –

+0

Il est probablement important de noter que vous ne pouvez pas faire cela en runtime 1.1. Bien sûr, les exceptions dans les threads peuvent provoquer une corruption de la mémoire dans 1.1, donc vous ne devriez pas l'utiliser si possible. – quillbreaker

0

ThreadPool.SetMaxThreads (5,5), puis quoi que ce soit plus de cinq threads se mis en attente.

0

Vous souhaitez utiliser la méthode ThreadPool.SetMaxThreads().

4

Vous pouvez utiliser ThreadPool.SetMinThreads et ThreadPool.SetMaxThreads pour avoir un certain contrôle sur le nombre de threads dans le pool de threads. Cela étant dit, je recommande d'être prudent dans l'utilisation de cela. Il est facile d'avoir des ennuis, car de nombreuses opérations dans la BCL reposent sur des threads threadpool disponibles.

Questions connexes