Faire en sorte que l’utilisateur choisisse le nombre de threads qu’il souhaite que le programme utilise

Je voudrais faire un programme qui lit chaque ligne d’un fichier .txt faire quelque chose avec chaque ligne.

Je voudrais que l’utilisateur puisse choisir les threads. S’il choisit par exemple 10 threads, le programme pourra faire quelque chose sur 10 lignes en même temps.

Disons que le fichier texte contient par exemple 1 000 000 lignes, comment dois-je faire?

Voici ce que j’ai en fait pour lire les lignes une à une:

var lines = File.ReadLines(accounts); foreach (var line in lines) { // Start a thread, but maximum 10 threads at the same if the user input is 10, for example. } 

Merci beaucoup.

Vous ne pouvez absolument pas contrôler le nombre de threads. Le nombre utilisé dépend du nombre disponible et d’autres facteurs. Mais vous pouvez limiter le nombre de threads en spécifiant le nombre maximal à utiliser.

Utilisation de Parallel.ForEach :

 var options = new ParallelOptions {MaxDegreeOfParallelism = 5}; Parallel.ForEach(lines, options, line => { // do something with each line }); 

MaxDegreeOfParellelism ne raconte pas toute l’histoire, cependant. Cela limite simplement le nombre de threads. Les threads utilisés proviennent du pool de threads gérés. Le nombre de threads disponibles pour le démarrage de nouvelles tâches peut être défini à l’aide de ThreadPool.SetMinThreads et ThreadPool.SetMaxThreads .

Mais cela ne dit toujours pas toute l’histoire. Le nombre d’opérations simultanées pouvant être effectuées est limité par votre nombre de cœurs de processeur. Cela dépend aussi de ce que ces opérations font. Par exemple, quel que soit le nombre de threads en cours d’exécution, ils ne peuvent pas tous écrire sur le disque en même temps. L’augmentation du nombre de threads au-delà d’un certain point peut réduire les performances.

Il est donc intéressant d’expérimenter, mais dans la plupart des scénarios, il est très peu probable que l’utilisateur d’un programme sache combien de threads doivent être exécutés simultanément.

Et ce n’est qu’un moyen de réaliser le multithreading. Parellel.ForEach est pratique lorsque vous avez un IEnumerable (comme le tableau de lignes lu dans le fichier) et que vous souhaitez les exécuter en parallèle.

Un autre facteur à prendre en compte est que, lorsque vous effectuez des opérations en parallèle, vous ne pouvez pas garantir la séquence dans laquelle elles seront exécutées. Ils peuvent sembler exécuter la FIFO, mais vous la lancerez à nouveau et ils ne le feront pas.

Parallel.ForEach exécutera chaque instance de boucle dans son propre thread et vous permettra également de définir MaxDegreeOfParallelism (# de threads) sur ce que vous souhaitez.

  Parallel.ForEach(lines, new ParallelOptions{ MaxDegreeOfParallelism = 10 }, line => { // do stuff with line });