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 :

Optimisation de l'appel Asynchrone


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2006
    Messages : 35
    Par défaut Optimisation de l'appel Asynchrone
    Bonjour,
    J'ai une liste qui contient 30 000 objets de type MatchIn, et je dois les convertir en objetss de type MatchOut.
    si je lance cette méthode de conversion dans un thread j'aurais un une liste d'objets convertis au bout de 10 minutes.

    J'ai pensé à lancer chaque conversion dans une méthode asynchone.ainsi, je ferai 30 000 appels à des méthodes asynchrones.

    -Je voulais savoir est ce que c'est pénalisant de lancer un grand nombre de traitement asynchrone? 30 000 dans mon cas.

    -J'ai pensé à splitter cette liste à trois listes(par exemple) avec 10 000 element dans chaque liste et lancer unthread de conversion pour chaque liste.

    - sinon est ce que vous avez d'autres propositions plus performantes.Merci

  2. #2
    Membre averti
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2006
    Messages : 35
    Par défaut
    Voila une petit prototype:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    public static void Main()
    {
               for (int i = 0; i < 30000; i++)
                {
                    MatchIn match = new MatchIn();
                    match.Pro1 = i;
                    listMatch.Add(match);
                }
                converter.ConvertAllMatches(converter.ConvertMatch, listMatch);
    }
     
     
    //Un Exemple simplifié de la classe d'entrée
        public class MatchIn
        {
            public double Pro1;
            public MatchIn(){}
        }
        //Un Exemple simplifié de la classe de sortie apres conversion
        public class MatchOut
        {
            public double Pro1;
            public MatchOut() { }
        }
        public class AsyncMatchConverter
        {
            List<MatchOut> maListeDeMatch = new List<MatchOut>();
            public delegate MatchOut DelegateToConvertionMethod(MatchIn arg);
     
            public MatchOut ConvertMatch(MatchIn match)
            {
                Thread.Sleep(2000);
                MatchOut result = new MatchOut();
                result.Pro1 = match.Pro1;
                Console.Write("-----------Fin de la conversion du mach");
                return new MatchOut();
            }
     
            private void ConversionCallback(IAsyncResult iar)
            {
                DelegateToConvertionMethod mc = (DelegateToConvertionMethod)iar.AsyncState;
                MatchOut result = mc.EndInvoke(iar);
                maListeDeMatch.Add(result);
                Console.WriteLine("-----------maListeDeMatch : element added[{0}]: total element count = {1}", result.Pro1, maListeDeMatch.Count);
            }
            public void ConvertAllMatches(DelegateToConvertionMethod convertFunc, List<MatchIn> listeDeMatchAConvertir)
            {
                AsyncCallback cb = new AsyncCallback(ConversionCallback);
     
                foreach (MatchIn matchIn in listeDeMatchAConvertir)
                {
                    Console.WriteLine("-----------BeginInvoke: {0}", matchIn);
                    convertFunc.BeginInvoke(matchIn, cb, convertFunc);
                }
            }
        }

  3. #3
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2009
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2009
    Messages : 317
    Par défaut
    As tu essayé en utilisant un pool de thread (où le nombre de threads dans le pool est paramétrable) ?

  4. #4
    Membre averti
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2006
    Messages : 35
    Par défaut
    Oui Merci. c'est ce que je cherche

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. appel asynchrone dans le thread principal
    Par mrrenard dans le forum C#
    Réponses: 6
    Dernier message: 05/04/2007, 09h07
  2. session avec appel asynchrone
    Par netounet dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 11/03/2007, 14h49
  3. [C#]théorie appel asynchrone
    Par ddoc dans le forum Windows Forms
    Réponses: 1
    Dernier message: 14/05/2006, 15h43
  4. Appel Asynchrone/Synchrone
    Par Dry dans le forum CORBA
    Réponses: 3
    Dernier message: 26/04/2005, 20h43
  5. [SOAP] API pour appels asynchrones
    Par Dar Shak dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 26/04/2005, 08h57

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