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

Discussion :

Libération de la mémoire

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 19
    Par défaut Libération de la mémoire
    Bonjour à tous! J'ai un souci au niveau de l'utilisation de la mémoire, si quelqu'un à une idée de la cause du problème ce serait super!

    En gros je fais appel à des boucles for imbriqués, et dans ces boucles for j'instancie des objets à chaque fois. ces boucles sont dans une méthode, seulement le souci c'est qu'à la sortie de ces méthodes l'espace utilisé est toujours présent. Du coup un nouvel appel à la méthode crée un nouvel espace de mémoire utilisé!

    Les variables locales sont elle réellement détruites à la sortie des méthodes?
    Comment pourrais je supprimmer manuellement ces variables? Merci!

  2. #2
    Rédacteur

    Avatar de johnlamericain
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    3 742
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 3 742
    Par défaut
    Il serait plus facile de te répondre avec le code de ces boucles. Peux-tu nous le fournir ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 19
    Par défaut
    Citation Envoyé par johnlamericain Voir le message
    Il serait plus facile de te répondre avec le code de ces boucles. Peux-tu nous le fournir ?
    oui biensur

    alors on a une première méthode dans laquel il y a un for:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    			for (int index = 0; index < l_xConf.size(); index++)
    			{
     
    				ChangerAttribut(l_xConf.at(index));
     
    				pxDlgAttente->stepItProgressBar();
    			}

    dans ChangerAttribut:
    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
    	for (int indexLigne = 0; indexLigne < m_lstAttributsLcdv->rowCount(); indexLigne++) 
    	{
    		l_saCodesLcdv = GetComboBoxValues(ECmbxCodes, indexLigne);
    		l_saValeursLcdv = GetComboBoxValues(ECmbxValeurs,indexLigne);
     
    		for (int index = 0; index < l_saCodesLcdv->size(); index++) 
    		{
    			if (p_sClasseValeurLCDV == l_saCodesLcdv->at(index))
    			{
    				[...]
     
    				l_iIndiceLigne = indexLigne;
    			}
    			if (l_iIndiceLigne != -1) break;
    		}
    		if (l_iIndiceLigne != -1) break;
    	}
    En commentant décommentant, je m'apperçois que la mémoire utilisé augmente à ce niveau là:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    		l_saCodesLcdv = GetComboBoxValues(ECmbxCodes, indexLigne);
    		l_saValeursLcdv = GetComboBoxValues(ECmbxValeurs,indexLigne);
    du coup voilà la méthode GetComboBoxValues():

    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
    	QComboBox* l_cbxCurrent;
    	switch(p_eType)
    	{
    		case ECmbxCodes:
    			l_cbxCurrent = m_mapComboBoxCodes->value(GetNomAttributAvecLigne(p_iLigne),new QComboBox());
    			break;
    		case ECmbxValeurs:
    			l_cbxCurrent = m_mapComboBoxValeurs->value(GetNomAttributAvecLigne(p_iLigne),new QComboBox());
    			break;
    		default:
    			return NULL;
    	}
     
    	QStringList* l_lstValues = new QStringList();
    	for(int i = 0 ; i < l_cbxCurrent->count() ; i++)
    	{
    		l_lstValues->append(l_cbxCurrent->itemText(i));
    	}
    	return l_lstValues;
    Je me dit que ça vient du grand nombre de variable qui est utilisé, mais normalement ceux ci devraient être detruit une fois la méthode terminé non?

  4. #4
    Rédacteur

    Avatar de johnlamericain
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    3 742
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 3 742
    Par défaut
    Tout simplement tes pointeurs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    QComboBox* l_cbxCurrent;
    QStringList* l_lstValues = new QStringList();
    sont probablement jamais détruits (ou au moins celui qui n'est pas retourné par la fonction).

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 19
    Par défaut
    Citation Envoyé par johnlamericain Voir le message
    Tout simplement tes pointeurs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    QComboBox* l_cbxCurrent;
    QStringList* l_lstValues = new QStringList();
    sont probablement jamais détruits (ou au moins celui qui n'est pas retourné par la fonction).
    Ben j'ai rajouté un suivi d'un et la même chose pour cela ne change absolument rien. La ressource utilisé n'a pas changé

  6. #6
    Rédacteur

    Avatar de johnlamericain
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    3 742
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 3 742
    Par défaut
    Puis-je voir ton code de cette partie ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Libération de la mémoire
    Par Premium dans le forum C
    Réponses: 4
    Dernier message: 09/08/2006, 18h15
  2. [CSV] Libération de la mémoire
    Par cedricgirard dans le forum Langage
    Réponses: 7
    Dernier message: 05/01/2006, 12h02
  3. libération de la mémoire après traitement ?
    Par isachat666 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 07/12/2005, 19h29
  4. [VB]Libération de la mémoire
    Par seroa dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 12/10/2005, 11h52
  5. Libération de la mémoire
    Par gibet_b dans le forum Composants VCL
    Réponses: 3
    Dernier message: 30/06/2004, 12h02

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