IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

boucle qui consomme beacoup de memoire


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Inscrit en
    Août 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 6
    Par défaut boucle qui consomme beacoup de memoire
    salut tout le monde ;

    mon problème c'est que j'ai un programme qui marche bien mais qui consomme beaucoup en mémoire (la moitié) peut-être que c'est la boucle while qui cause le problème!!
    voici les 2 classes

    classe extraction qui permet de parcourir un fichier est de le lire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
     
    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 main qui permet de retourner des valeurs a l'aide de regex a partir du fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    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

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,



    Déjà corriges tes try/catch qui sont affreux : pourquoi en avoir autant alors qu'il suffit d'en avoir un seul qui engloberait tout le traitement...
    Ensuite utilises des try/finally pour libérer les ressources proprement (voir la FAQ).
    Enfin utilises un StringBuilder pour générer la chaine, au lieu de concaténer des String (ce qui est très couteux en mémoire).
    De même, pourquoi faire une lecture ligne par ligne alors que tu veux récupérer tout le fichier. Une lecture par bloc serait plus avantageuse...

    Voir sujet similaire posté il n'y a pas longtemps : http://www.developpez.net/forums/d95...e/#post5384612


    a++

Discussions similaires

  1. [MySQL] Boucle qui ne fonctionne pas bien que la 1ère fois
    Par R.L. dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 27/05/2006, 21h59
  2. [VBA-E]une boucle qui ne s'arrète pas
    Par vivelesgnous dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 15/02/2006, 18h05
  3. Réponses: 1
    Dernier message: 28/07/2005, 14h21
  4. programme qui consomme beaucoup de memoire
    Par gaut dans le forum Windows
    Réponses: 10
    Dernier message: 01/02/2005, 20h33
  5. [VB.NET] DataReader qui prend enormement de memoire
    Par JohnGT dans le forum Windows Forms
    Réponses: 9
    Dernier message: 07/01/2005, 17h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo