Bonjour,
J’ai une fonction assez simple qui récupère le titre de chaque page d’un site via des fichiers textes.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | private void feed_Click(object sender, RoutedEventArgs e) { string[] urls = File.ReadAllLines("pages.txt"); int c = urls.Length; string liste = null; for (int i = 0; i < c; ++i) { try{ Uri uri = new Uri(urls[i]); HttpWebRequest http = (HttpWebRequest)WebRequest.Create(uri.Scheme + "://" + uri.Host); WebResponse response = http.GetResponse(); StreamReader sr = new StreamReader(response.GetResponseStream()); string html = sr.ReadToEnd(); MatchCollection matches = osef,etc. [...] } catch { } } File.WriteAllText("resultats.txt", liste); } |
Le gros problème est que la liste de pages dans pages.txt est assez importante (> 2000) donc toute l’opération prend un temps non négligeable.
Je pensais utiliser les threads mais je suis loin d’être un expert dans ce domaine.
J’imaginais un truc un peu comme ça :
1 2 3 4 5 6 7 | Thread th1 = new Thread(get_titres); th1.Start(); Thread th2 = new Thread(get_titres); th2.Start(); [...] |
Deux problèmes :
1. Il va y avoir beaucoup de threads.
Si je veux utiliser 100 threads, va-t-il falloir créer manuellement un nouvel objet th[N] jusqu’à 100 (th1 … th98, th99, th100) ?
Ou existe-t-il une méthode plus simple ?
2. Comment gérer la boucle for ?
Dans mon exemple mono-thread je me sers du "compteur" i pour marquer le numéro de ligne du fichier pages.txt.
Or ça va être assez difficile à faire avec les threads, non ?
Faut-il faire passer ce i en argument d’une nouvelle fonction ou bien y a-t-il une manière plus simple de procéder ?
Merci de vos réponses, je débute un peu avec les threads.