Boucle qui consomme beaucoup de memoire [Résolu]

cs_pedro0077 3 Messages postés samedi 23 mai 2009Date d'inscription 3 août 2010 Dernière intervention - 3 août 2010 à 12:16 - Dernière réponse : kaloway 358 Messages postés jeudi 24 octobre 2002Date d'inscription 30 mars 2011 Dernière intervention
- 3 août 2010 à 12:46
salut tout le monde ;

mon probleme c'est ke j'ai un programe ki marche b1 mais qui consomme beaucoup en memoire (la moitié) peut etre ke la boucle while qui cause le probleme!!!
voici les 2 classes

classe extraction qui permet de parcourir un fichier est de le lire
import javax.swing.*;
import java.awt.GridLayout;
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent;
import java.io.* ; 
public  class extraction 
 {
 String fichierPath="";
 String chaine="";

  public String getChaine() {
          return chaine;
      }
  
// Méthode de choix d'un fichier
public void choisir() {
// Crée un panneau
JPanel contenuFenêtre = new JPanel();

// Affecte un gestionnaire de présentation à ce panneau
GridLayout disposition = new GridLayout(4,2);
contenuFenêtre.setLayout(disposition);
// Crée les contrôles en mémoire


// Ajoute les contrôles au panneau
// Crée le cadre et y ajoute le panneau
JFrame cadre = new JFrame("Boutton parcourir");
cadre.setContentPane(contenuFenêtre);

// Affecte ses dimensions à la fenêtre et la rend visible
cadre.setSize(400,100);
cadre.setVisible(true);

JButton lancer = new JButton("parcourir");
contenuFenêtre.add(lancer);
//Action sur le bouton
lancer.addActionListener( new ActionListener() {
    public void actionPerformed(ActionEvent e){
        JFileChooser chooser = new JFileChooser();
        int returnVal = chooser.showOpenDialog(chooser);
        if(returnVal == JFileChooser.APPROVE_OPTION) {
           System.out.println("Vous avez choisi le fichier : " +
                chooser.getSelectedFile().getName());
           		fichierPath = chooser.getSelectedFile().getAbsolutePath();
           	System.out.println("le lien du fichier est : "+ fichierPath);
           	String ligne="" ; 
           	System.out.println ("*** debut du fichier ***");  
           	BufferedReader entree = null;
try {
entree = new BufferedReader (new FileReader (fichierPath));
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
    		do
    			{ try {
ligne = entree.readLine() ;
} catch (IOException e1) {

e1.printStackTrace();
}
    				if (ligne != null) {System.out.println (ligne) ;
    				chaine+=ligne+"\n";}
    			}
    		while (ligne != null) ;
    		//System.out.println (chaine) ;
    		try {
entree.close() ;
} catch (IOException e1) {

e1.printStackTrace();
}
    		System.out.println ("*** fin du fichier ***");       	 
    }
 
    }
} );

}

}


classe maine qui permet de retourner des valeurs a l'aide de regex a partir du fichier

import java.util.*;
import java.util.regex.*;
import java.io.*;

public class main extends extraction {

private static Pattern pattern;
private static Matcher matcher;

public static void main (String args[])
{ 	
String chaine2 ="";
extraction lecture = new extraction() ;	
    lecture.choisir();
    while (true) {
    	String aParser= lecture.getChaine();
if (!aParser.equals(chaine2)) {
chaine2=aParser;
    Pattern p=Pattern.compile("(.*?)*#\\{(.*?)\\}#.*?");
Matcher m=p.matcher(aParser);
while(m.find()) 
System.out.println(m.group(2)); 

}
}
}}


Merci d'avance pour vos aides
Afficher la suite 

Votre réponse

1 réponse

Meilleure réponse
kaloway 358 Messages postés jeudi 24 octobre 2002Date d'inscription 30 mars 2011 Dernière intervention - 3 août 2010 à 12:46
3
Merci
Le problème est que chaine est un string. La classe string est consommatrice de ressource, surtout quand on concane des chaine. il est préférable d'utiliser les classes stringbuffer ou stringbuidler.

Merci kaloway 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de kaloway

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.