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