Comment utiliser le multi-threading dans une boucle For

Je veux atteindre le dessous de l'exigence; s'il vous plaît suggérer une solution.

string[] filenames = Directory.GetFiles("C:\Temp"); //10 files

for (int i = 0; i < filenames.count; i++)    
{
    ProcessFile(filenames[i]); //it takes time to execute    
}

J'ai voulu mettre en place le multi-threading. e.g Il y a 10 fichiers. Je voulais processus 3 fichiers à la fois (configurable, dire maxthreadcount). Donc 3 fichiers seront traités dans les 3 fils de la boucle for et si un thread termine l'exécution, il doit choisir le prochain élément de la boucle for. Voulait aussi s'assurer que tous les fichiers sont traités avant de sortir de la boucle for.

S'il vous plaît suggérer la meilleure approche.

Vous êtes vraiment coincé sur .NET 2.0? Il va être beaucoup mieux approches .NET 3.5, ou mieux encore 4.0.
Toute suggestion à l'aide de pool de threads ou de Sémaphore?
Non, à l'exception: de l'OUBLIER, à moins que votre traitement est intensif pour le CPU. Le Disque n'obtient pas comme par magie plus rapide. IO va être un sérieux goulot d'étranglement contenter.
Parce que si c'est BEAUCOUP, l'OI SERA le goulot d'étranglement. Sérieusement. Vous avez une idée de comment RALENTIR un disque est en fait par rapport à un PROCESSEUR core? Il va prendre BEAUCOUP de traitement à l'équilibre.
Le goulot d'étranglement peut ne pas se produire si le fichier ne prend pas beaucoup de temps pour lire. Peut-être que le "il faut du temps pour exécuter" est attaché à traiter les données à partir du fichier une fois qu'il est chargé, dans ce cas c'est une bonne idée d'aller faire un multi-thread pour cela. Si le retard est parce que le fichier prend beaucoup de temps pour lire, alors je suggère d'oublier le multithreading. Pour un exemple du temps perdu, copie d'un fichier énorme entre les 2 disques Durs et de regarder l'ETA - copie puis une deuxième fichier sur le dessus de cela et de voir comment l'ETA a plus que doublé! Vous voulez vraiment lire à seulement 1 fichier à la fois 😉

OriginalL'auteur SAM | 2012-12-23