Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1436 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Performancer : StringBuffer

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Performancer : StringBuffer

n°225482
El_gringo
Posté le 09-10-2002 à 11:10:23  profilanswer
 

Question toute bête. Selon vous, laquelle de ces 2 boucles est la plus performante :
1 :

Code :
  1. StringBuffer myBuf = new StringBuffer ();
  2. StringBuffer mySecondBuf = new StringBuffer ();
  3. for (int i = 0; i < 10; i++) {
  4.    myBuf.append ("un truc" ).append ("plein d'autres trucs" );
  5.    mySecondBuf.append (myBuf.toString ());
  6.    myBuf.delete(0, myBuf.length());
  7. }


 
2 :

Code :
  1. StringBuffer myBuf;
  2. StringBuffer mySecondBuf = new StringBuffer ();
  3. for (int i = 0; i < 10; i++) {
  4.    myBuf = new StringBuffer ();
  5.    myBuf.append ("un truc" ).append ("plein d'autres trucs" );
  6.    mySecondBuf.append (myBuf.toString ());
  7. }


Message édité par El_gringo le 09-10-2002 à 11:19:35
mood
Publicité
Posté le 09-10-2002 à 11:10:23  profilanswer
 

n°225485
_Mac_
Posté le 09-10-2002 à 11:12:30  profilanswer
 

Ca marche, ça ??? C'est pour faire quoi exactement ? Ca me semble très foireux les 2 .append cascadés...
 

n°225488
El_gringo
Posté le 09-10-2002 à 11:15:02  profilanswer
 

_Mac_ a écrit a écrit :

Ca marche, ça ??? C'est pour faire quoi exactement ? Ca me semble très foireux les 2 .append cascadés...




 
Bah, append rend un StringBuffer, y a aucune raison que ça marche pas ! :??:
 
EDIT : Et puis c pas important ça. La g écrit ça juste pour illustrer ma question. L'important, c'est : créer un nouveau StringBuffer à chaque ittération, ou effacer le contenu d'une seule instance ?


Message édité par El_gringo le 09-10-2002 à 11:20:12
n°225493
_Mac_
Posté le 09-10-2002 à 11:26:11  profilanswer
 

A mon avis, la solution 1 est plus rationnelle : elle chargera moins la mémoire et sera moins couteuse en CPU car l'instanciation est un mécanisme assez lourd.
 
Mais pourquoi utilises-tu 2 StringBuffer ??? 1 seul suffit, a mon avis.

n°225500
El_gringo
Posté le 09-10-2002 à 11:31:41  profilanswer
 

_Mac_ a écrit a écrit :

A mon avis, la solution 1 est plus rationnelle : elle chargera moins la mémoire et sera moins couteuse en CPU car l'instanciation est un mécanisme assez lourd.
 
Mais pourquoi utilises-tu 2 StringBuffer ??? 1 seul suffit, a mon avis.




 
Dans l'exemple que j'ai donné, évidement que ça suffirait, Mais ma situation est telle qu'il me parait logique d'utiliser 2 StringBuffer.
A priori, j'pense aussi que la solution 1 est la meilleur. Mais j'attend qd même qqs autres avis...

n°225561
BifaceMcLe​OD
The HighGlandeur
Posté le 09-10-2002 à 12:50:10  profilanswer
 

Le méthode par new est un peu plus rapide. Elle le sera d'autant plus si tu connais un majorant de la taille maximum que prendra ton StringBuffer temporaire.
 
Le problème du delete() est qu'il fait une copie de tableau systématique (et même pas par un System.arraycopy(), d'après les sources du J2SDK !  :ouch: ) .
 
Il y a de toute façon plus rapide que delete() si tu n'aimes pas la méthode new(): fais un myBuf.setLength(0)...

n°225600
El_gringo
Posté le 09-10-2002 à 14:16:33  profilanswer
 

Mais j'ai rien contre la méthode New moi. Juste, je me disais qu'en faisant plein de new, je vais avoir plein d'instances "poubelle" (sans référence dessus !), et qu'elles risques de surcharger la mémoire en attendant d'être détruites par la garbage collector. Mais là, je dis peut être des conneries.

n°225636
BifaceMcLe​OD
The HighGlandeur
Posté le 09-10-2002 à 15:14:47  profilanswer
 

El_Gringo a écrit a écrit :

Mais j'ai rien contre la méthode New moi. Juste, je me disais qu'en faisant plein de new, je vais avoir plein d'instances "poubelle" (sans référence dessus !), et qu'elles risques de surcharger la mémoire en attendant d'être détruites par la garbage collector. Mais là, je dis peut être des conneries.




C'est possible, mais le garbage collector de la JVM de Sun est assez agressif de ce point de vue (quant à HotSpot Server, je n'en parle même pas... il l'est encore plus). Ca ne m'étonnerait pas qu'il soit capable de détecter la courte portée du StringBuffer temporaire et qu'il le désalloue aussi vite que tu en alloues de nouveau.
 
Mais la solution StringBuffer.setLength(0) me semble assez simple et élégante pour contourner tes craintes.

n°225652
El_gringo
Posté le 09-10-2002 à 15:35:18  profilanswer
 

Bon, ben c parti alors.
Merci...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Performancer : StringBuffer

 

Sujets relatifs
[Jdk1.3.1]Comment obtenir un InputStream sur un StringBuffer [RESOLU] 
Plus de sujets relatifs à : Performancer : StringBuffer


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR