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 :

Thread sur un programme externe


Sujet :

C#

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 31
    Points : 18
    Points
    18
    Par défaut Thread sur un programme externe
    Bonjour,

    A partir de mon programme en C# je lance un .exe (développé en C) dont le temps d'exécution est de 0.5 secondes. Je veux récupérer la valeur retournée par le programme C et je dois donc faire un .waitforexit().

    Comme le programme C doit être appelé une vingtaine de fois, le temps d’exécution C# est de ~10sec.

    L'idée était de lancer les 20 appels dans 20 threads qui attendraient le retour du programme C. Comme les threads sont lancés simultanément, le temps d’exécution que j'attendais était inférieur à 1 seconde.

    Pourtant le temps d'éxecution est de 8 secondes, soit un gain très peut important.

    Est-ce que vous avez une idée du pourquoi, et une solution pour être plus rapide ?


    Je met le code qu'exécute un Thread :

    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
     
     
            private void threadLauncher(object chemin)
            {
                string parametres = chemin.ToString();
                string[] mots = parametres.Split('#');
                Process proc = new Process();
                ProcessStartInfo processStarInf = new ProcessStartInfo();
                processStarInf.FileName = ".\\programme.exe";
                processStarInf.WindowStyle = ProcessWindowStyle.Hidden;
                processStarInf.Arguments = mots[1];
                proc = Process.Start(processStarInf);
                proc.WaitForExit();
                int result = proc.ExitCode;
                essai[Convert.ToInt32(mots[0])] = result;
     
     
            }


    Ainsi que le code qui appelle les 20 threads :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
                Thread th2=null;
                for (int i = 0; i < 20; i++)
                {
                        th2 = new Thread(new ParameterizedThreadStart(threadLauncher));
                        string param = i.ToString() + "#\"fichier1\" \"fichier2\"";
                        th2.Start(param);
                 }
                th2.Join();

  2. #2
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    269
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 269
    Points : 460
    Points
    460
    Par défaut
    Bonjour,

    T'as une machine à plus de 20 coeur?
    Pour espérer approcher de la seconde, il te te faudrait plus de 10 coeur, ce qui n'existe qu'avec du bi-cpu exa-core.
    Bref voila la raison principal des 8 secondes.

    Niveau rapidité, peut-être qu'en passant ton programme C en dll, tu pourrais gagner le coup de chargement du programme en mémoire.
    En utilisant Parallel.Task, ça pourrait optimiser la gestion des threads
    Mais ce ne sont que des peut-être.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 31
    Points : 18
    Points
    18
    Par défaut
    Oké, merci pour la réponse, effectivement c'est logique
    Je vais essayer avec la dll et me renseigner sur le Parallel.Task.
    Merci !

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

Discussions similaires

  1. [Objective-C] Lancer un programme externe + question sur va_list
    Par ThomasAU dans le forum Objective-C
    Réponses: 4
    Dernier message: 10/07/2010, 14h42
  2. Lancer un programme externe en cliquand sur un bouton
    Par maxkarting25 dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 17/05/2008, 10h20
  3. Réponses: 2
    Dernier message: 03/09/2007, 23h06
  4. Installation de programmes sur un disque externe
    Par Niktou dans le forum Composants
    Réponses: 5
    Dernier message: 29/11/2005, 22h59
  5. faire un test sur un programme externe
    Par marieheraud dans le forum Windows
    Réponses: 3
    Dernier message: 02/09/2004, 18h32

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