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();