ThreadPool avec 1000 requetes

Résolu
darkolite Messages postés 12 Date d'inscription mardi 20 juillet 2004 Statut Membre Dernière intervention 24 novembre 2006 - 27 sept. 2006 à 15:54
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 - 29 sept. 2006 à 09:41
Bonjour messieurs (dames?)

Je lutte depuis pas mal de temps avec le ThreadPool en C#. Je ne sais pas si c'est d'ailleurs la meilleurs solution. Voila ce que je voudrait faire.

Je récupére une liste de pages internet a récuperer, disons 1000 urls.

J'ai mon code qui fonctionne très bien, pour une url donnée, mon code récupère la page web, la parse pour prendre uniquement les infos qui m'interresse, puis enregistre ces données dans une base de donnée. Un peu a la maniere d'un crawler.

Lorsque je lance ma boucle sur les 1000 urls, ce systeme fonctionne très bien.

J'ai donc décidé de l'optimiser en gagnant du temps. Je voudrai lancer 20 Threads au lieu d'un, et dès qu'un de ces Threads a fini, il reprend le travail avec une nouvelle urls, pour traité les 980 urls suivantes.

Je me suis donc interressé au ThreadPool, car si je comprend bien, c'est justement son but. Je lance mon programme et voila ce qu'il m'arrive : Un beau message d'erreur :

"There were not enough free threads in the ThreadPool object to complete the operation."

Ok, je me renseigne sur le net, j'essaie differente facon, je mets des Thread.sleep partout pour voir comment ca marche... Rien pas moyen.

Je viens de faire un dernier Test, j'ai enlever toutes mes requetes webs, leurs traitements et l'insertion en base, et je l'ai remplacer par un  "Thread.Sleep(1000);" Et Surprise, tout a l'air de fonctionner !!! Mon Thread pool est plein assez rapidement, mais quand il est plein il plante pas... il continue avec ces 25 Threads par defaut.

Quelqu'un a une idee d'ou ca peut venir ?

Merci pour votre aide.

Yann

15 réponses

MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
27 sept. 2006 à 16:55
Cela ressemble a ton souci
http://support.microsoft.com/default.aspx?scid=kb;en-us;815637

Tu as l'erreur en executant l'exemple de code ?

Mx
MVP C# 
3
Rejoignez-nous