IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Webservices et threads


Sujet :

C#

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2009
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 60
    Par défaut Webservices et threads
    Bonjour,

    Je vous expose mon problème:
    Je possède une liste d'id de personne (la liste peut être très grande). Je fait un foreach sur cette liste, et pour chaque id, j'appel un webservice qui me renvoi des données sur l'id de la personne.
    Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    foreach (long pid in HashSet_Players_Id)
    {
    	// Le webservice est "AccessGsm.get_Player_Career", j'inserere son résultat dans une liste
    	List_Persons.Add(AccessGsm.get_Player_Career(listPersonLong[0], gsmService, user, password)[0]);
     
    	// Je fait le taraitement "processCareers" pour une tranche de 250 entrée dans la liste
    	if (List_Persons.Count % 250 == 0 || List_Persons.Count == HashSet_Players_Id.Count)
    	{
    		retour = processCareers(List_Persons);
    		List_Persons.Clear();
    	}
    }
    Le problème, c'est que ce traitement prend énormément de temps, j'aimerais l'optimiser en utiliser les threads.
    J'aimerais en gros faire l'appel à mon webservice dans un thread (car c'est le webservice qui prend du temps), mais le problème c'est que le programme continue à s’exécuter, et le foreach est quitté sans être entré dans "if (List_Persons.Count % 250 == 0)" car la liste List_Persons est vide (étant donné que les threads ne sont pas finis).
    Pouvez vous m'aider sur la manière de mettre en place le ou les threads pour ce cas de figure?

    Merci pour votre aide.

  2. #2
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Dans ton if, tu dois boucler sur tes thread et faire un ".Join()" dessus.

    Ainsi, tu t'assures que tous ont bel et bien terminé avant de continuer.

    En revanche, 250 thread en //, c'est le meilleur moyen de :
    1/ Saturer la mémoire et le CPU de ton PC
    2/ Faire de DoS au serveur web
    3/ Te faire blacklister par le serveur web
    4/ Perdre plus de temps que tu n'en n'a gagné en surchargeant le serveur web, et donc en provoquant un goulot d'étranglement
    5/ Et je ne parle pas de la charge réseau...

    Bref :
    Passe par un pool de 5 thread maxi. Selon le nombre de cores de ton poste, tu peux éventuellement partir sur nombre de cores - 1 threads. Pense aussi à mettre un affinity différent à chaque thread, histoire d'en tirer parti, sinon Windows va passer plus de temps à passer les thread d'un CPU à l'autre (il est champion pour ça) qu'à les exécuter.

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2009
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 60
    Par défaut
    D'accord pour le nombre de threads. Mais mon problème est aussi dans le retour de mon webservice. Admettons que mon webservice se trouve dans un thread, comment récupérer son retour dans mon foreach?

Discussions similaires

  1. WebServices et thread
    Par Shivan dans le forum Services Web
    Réponses: 1
    Dernier message: 14/12/2011, 18h08
  2. [thread] Webservice Bloquant
    Par DaMo` dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 29/10/2008, 11h07
  3. [WEBSERVICE+THREAD] Pas d'accès
    Par ghost942 dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 14/10/2008, 00h44
  4. Modification du nombre de threads par WebService
    Par globule71 dans le forum JOnAS
    Réponses: 2
    Dernier message: 31/10/2007, 14h43
  5. Requête WebService en permanence -threads !
    Par coax81 dans le forum Débuter
    Réponses: 1
    Dernier message: 13/09/2007, 13h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo