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

MFC Discussion :

[MFC] Utilisation mémoire


Sujet :

MFC

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2005
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 19
    Points : 14
    Points
    14
    Par défaut [MFC] Utilisation mémoire
    Comment fermer correctement un dialogue secondaire, i.e. libérer toute la mémoire allouée pour ce dialogue ?

    J'ai créé deux dialogues minimaux : le premier comprenant juste un boutton qui ouvre le second, le second un boutton de fermeture. Si j'effectue plusieurs ouvertures / fermetures du second dialogue, la mémoire utilisée grossit sans cesse.
    Pour fermer le second dialogue j'ai essayé OnOK(), OnCancel(), DestroyWindow(), EndDialog().

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    sans voir ton code je dirais que tu fais des allocations memoires non relachées ..
    verfie tes new / delete .


  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2005
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    Non :)

    mais pour aller un peu plus loin que ta signature :
    dans mon appli je n'utilise qu'au plus des références .. zéro free/new/malloc/delete
    dans mon exemple y'a VRAIMENT que deux bouttons ...

    sic

  4. #4
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    si tu n'as pas d'allocations je ne vois pas comment ça peut grossir ....
    renversement de la preuve ...

    Comment détermines tu que tu as des pertes mémoire ?
    et si tu nous montrais un peu de code ...

  5. #5
    Membre à l'essai
    Inscrit en
    Juillet 2005
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par farscape
    si tu n'as pas d'allocations je ne vois pas comment ça peut grossir ....
    d'où mon appel à l'aide
    renversement de la preuve ...
    ben je sais pas trop ce que fais Visual/Wizard/Windows .. mais des pointeurs trainent par défaut dans le code généré par le wizard ..

    Comment détermines tu que tu as des pertes mémoire ?
    taskmanager (que je ne brutalise pas hein) - j'attends entre les relevés
    et si tu nous montrais un peu de code ...
    ben y'a pas grand chose, le dialogue principal a 1 boutton :
    dialog2 dlg(this);
    dlg.DoModal();

    le dialogue secondaire a 1 boutton :
    OnOK(); / OnCancel(); / DestroyWindow(); / EndDialog() ...

    Thx

  6. #6
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    si tu lances ton programme en trace debug ,il y a des memory leaks a la fin ?
    si non pas de fuite memoire .

  7. #7
    Membre à l'essai
    Inscrit en
    Juillet 2005
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    Ben non .. sinon je me serais abstenu de polluer ce forum :[

    si tu n'es pas vraiment convaincu et que tu en as le temps (2min)
    crées toi 2 dialogues dans lesquels tu mets des objets auxquels tu n'associes aucune action (juste pour prendre un peu de mémoire, que ca se voit plus facilement dans le taskmanager).
    Il faut juste un boutton pour lancer le second dialogue.
    Ensuite tu ouvres et fermes le second en surveillant ton taskmanager : la mémoire occupée augmente doucement mais ne revient jamais à son niveau de départ.

    et là, je sèche ... snif
    Merci quand même de prendre le temps de me répondre :)

  8. #8
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    tu es en debug ? tu utilises VS.NET ?

  9. #9
    Membre à l'essai
    Inscrit en
    Juillet 2005
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    arf, j'aimerais bien .. mais je suis sous Visual C++ 6.0

  10. #10
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    et bien en fait j'ai déjà fait le test ,rien de probant
    ça augmente au premier lancement de la deuxième dialogue ,
    a sa fermeture ça diminue par de la totalité ,puis je relance
    ça n'augmente plus ...

    je pense que depuis que les MFC existent (depuis ~93) et depuis le temps que je les pratiques (94) ,si il y avait un problème de cette nature ,c'est à dire une fuite de mémoire somme toute assez basique ça se saurait .

    je pencherais plutôt pour une approximation du gestionnaire des taches.

    j'ai les mêmes doutes en ce qui concerne le décomptage temps réel des objets GDI.

    D’ailleurs j'ai refais un test sur un prog win32 simple avec VC6.0:
    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
     
    int APIENTRY WinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPSTR     lpCmdLine,
                         int       nCmdShow)
    {
     	// TODO: Place code here.
    	MSG msg;
    	HACCEL hAccelTable;
     
    	// Initialize global strings
    	LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
    	LoadString(hInstance, IDC_ESSAILEAKS, szWindowClass, MAX_LOADSTRING);
    	MyRegisterClass(hInstance);
     
    	// Perform application initialization:
    	if (!InitInstance (hInstance, nCmdShow)) 
    	{
    		return FALSE;
    	}
     
    	hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_ESSAILEAKS);
     
    	MessageBox(NULL,"Avant "," ",0);
     
    	char *pdata= new char [1000000];
     
    	MessageBox(NULL,"Alloc "," ",0);
     
    	delete pdata;
     
    	MessageBox(NULL,"Free "," ",0);
     
    	pdata= new char [1000000];
     
    	MessageBox(NULL,"Alloc "," ",0);
     
    	delete pdata;
     
    	// Main message loop:
    	while (GetMessage(&msg, NULL, 0, 0)) 
    	{
    		if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) 
    		{
    			TranslateMessage(&msg);
    			DispatchMessage(&msg);
    		}
    	}
     
    	return msg.wParam;
    }
    voila les consommations memoires successives renvoyées par le gestionnaire des taches sur mon poste XP- PRO:

    2752 K : avant
    3768 K : Alloc
    2792 K : Free
    3772 K : Alloc
    2792 K : dernier free .


  11. #11
    Membre à l'essai
    Inscrit en
    Juillet 2005
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    Merci bien :)
    l'augmentation n'est bien sure pas exponentielle mais si tu la également constatée ça me rassure ..
    et comme mon appli est destinéee à ce genre d'ouvertures/fermetures successives, je craignais que la mémoire y passe trop rapidement

Discussions similaires

  1. Utilisation Mémoire d'une application
    Par scorplex dans le forum Composants VCL
    Réponses: 8
    Dernier message: 21/05/2005, 03h01
  2. [MFC]Utilisation d'un SLIDER , problème de conversion
    Par sylvain_c42 dans le forum MFC
    Réponses: 1
    Dernier message: 10/05/2005, 14h31
  3. [MFC] utilisation de printPreview
    Par Tsunamis dans le forum MFC
    Réponses: 7
    Dernier message: 05/04/2005, 10h14
  4. [MFC] Utilisation de sockets
    Par keupon dans le forum MFC
    Réponses: 2
    Dernier message: 28/01/2004, 14h37
  5. [MFC] Utilisation Drivers
    Par LAPLACE dans le forum MFC
    Réponses: 4
    Dernier message: 21/12/2002, 10h29

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