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