Lancement Processus: plus lents depuis java / terminal - Java - Programmation
Marsh Posté le 01-02-2006 à 16:14:01
oui, tu analyses les flux d'entrée et sortie pendant que le programme tourne, je suppose que ca doit ralentir le truc si tu as beaucoup d'ecritures, surtout que comme tu utilises readLine(), ben ca recherche les retours chariots...
tu pourrais gagner en gérant mieux tes flux je pense.
Marsh Posté le 01-02-2006 à 16:22:50
Je vois pas trop comment les géré différement, pour améliorer les performances.
Marsh Posté le 01-02-2006 à 16:32:21
Je vois 2 choses qui bouffent pas mal de ressources :
- new String(bufferedReaderInputStream.readLine())
le constructeur String(String) est une horreur à ne jamais utiliser et je vois même pas pourquoi il existe.
- System.out.println(resultat); à l'intérieur des boucle...
L'écriture sur la sortie standard est assez couteuse, passe plutot sur un system de Logs (Log4J par exemple http://logging.apache.org/log4j/docs/)
Marsh Posté le 01-02-2006 à 16:36:06
tu peux déjà commencer par lire par blocks plutot que par ligne.
cad, tu vires les BufferedReader, et tu manipules directement tes InputStream et OutputStream sortis du process.
apres, tu te fais un byte[] d'une taille raisonnable (genre 1024), et tu lis de cette maniere.
Marsh Posté le 01-02-2006 à 16:40:11
Si j'ai bien compris, toujours faire :
String s = "nouveau";
et surtout pas :
String s = new String("nouveau" );
Je vais regarder au niveau des logs.
Marsh Posté le 01-02-2006 à 16:41:05
hugo25 a écrit : Si j'ai bien compris, toujours faire : |
oui déjà, j'avais même pas vu ca
Marsh Posté le 01-02-2006 à 17:49:18
hugo25 a écrit : Si j'ai bien compris, toujours faire : |
Oui, c'est ça, et dans ton cas ça donne ;
Code :
|
Marsh Posté le 01-02-2006 à 15:52:31
Bonjour,
Je travaille sur une programme qui lance plusieurs processus :
Ceci lance des exécutables (écrit en c) qui réalisent des caluls très compliqués : plusieurs heures d'éxécution, et qui affichent les résultats sans cesse dans la console.
Le temps d'exécution est donc primordiale, et l'éxécution est plus longue quand je lance ce programme depuis java que depuis le terminal.
Il y a t'il une raison à cela ?
Merci d'avance pour votre aide.
Message édité par hugo25 le 02-02-2006 à 18:06:20