Lancement Processus: plus lents depuis java / terminal

Lancement Processus: plus lents depuis java / terminal - Java - Programmation

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
Reply

Marsh Posté le 01-02-2006 à 15:52:31   

Reply

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.

Reply

Marsh Posté le 01-02-2006 à 16:22:50    

Je vois pas trop comment les géré différement, pour améliorer les performances. :(

Reply

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/)

Reply

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.

Reply

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.

Reply

Marsh Posté le 01-02-2006 à 16:41:05    

hugo25 a écrit :

Si j'ai bien compris, toujours faire :
String s = "nouveau";
et surtout pas :
String s = new String("nouveau" );


oui déjà, j'avais même pas vu ca

Reply

Marsh Posté le 01-02-2006 à 17:49:18    

hugo25 a écrit :

Si j'ai bien compris, toujours faire :
String s = "nouveau";
et surtout pas :
String s = new String("nouveau" );


 
Oui, c'est ça, et dans ton cas ça donne ;
 

Code :
  1. resultat = bufferedReaderInputStream.readLine();

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed