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] Augmentation en mémoire


Sujet :

MFC

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 189
    Points : 126
    Points
    126
    Par défaut [MFC] Augmentation en mémoire
    Salut

    C'est de nouveau une question en générale. J'ai mon programme qui retourne normalement mais il prend tjs de plus en plus de ressource memoire malgré que j'efface tt ce que j'alloue, et je fais confiance à la destruction automatique de chaque fin de méthode.

    D'où peut venir le problème de l'augmentation mémoire.

    Merci

    Pitch

  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 ,
    a l'ouverture d'objets graphiques sans relachement .
    exemple bitmap,font, brush etc.... pour le gdi .
    maintenant pour le reste verifier les memory leaks en debug .


  3. #3
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 189
    Points : 126
    Points
    126
    Par défaut
    Je les vois ou les memoryleaks? Qu'est ce que c'est?

    C'est ce qu'on voit quand on est en debug et qu'on arrete le prog et qu'il marque apres?

  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
    yes il met en clair memory leaks avec eventuellement le nom du source et la ligne de l'allocation qui n'a pas ete relachée .
    dans le meilleur des cas il suffit de double clicker sur la ligne pour arriver sur le code en question...

  5. #5
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 189
    Points : 126
    Points
    126
    Par défaut
    la est ttes l'astuce je n'ai aucun memory leaks car je les ai déjà tous nettoyé.

    Le passage de paramètre au méthode peut faire monter la mémoire? Elle monte en générale de 4 à 10-12 octets.

  6. #6
    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
    si t'as les moyens, tu peux acheter BoundChecker (de numega compuware), il est tres bien pour ca, ou alors au moins le télécharger en version d'essai

    a+

    (je devrais me faire payer à chaque fois que je leur fais de la pub ... )

  7. #7
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 189
    Points : 126
    Points
    126
    Par défaut
    Farscape tu as écrit à l'ouverture d'objets graphiques sans relachement . Tu veux dire quoi par là?

    Le programme BoundsChecker j'ai été sur le site pour la version d'essai, on verra ce que ca donnera. (Si il me l'envoi )

  8. #8
    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
    re,
    sur quel OS tu executes ton prog ?
    sur 2000/XP regarde avec le gestionnaire des taches en rajoutant des infos
    menu affichage gestions des colonnes .
    pour rajouter les <> infos utiles comme les objets GDI les handles etc..

    tu as bien sur tous les sources :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE&#91;&#93; = __FILE__;
    #endif
    tu ouvres des threads ?


  9. #9
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 189
    Points : 126
    Points
    126
    Par défaut
    Je travaille sur XP et j'ai afficher d'autres colonnes mais que dois je tirer par exemple de la colonnne Handle, ou GDI?

    Pour le debug oui c dans chaque source. Et j'ai encore verif j'ai pas de memoru leaks.

    Je cree et supprime souvent un thread dans mon applic. Mais il n'alloue rien lui.

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 10
    Points : 11
    Points
    11
    Par défaut
    ??
    Le passage de paramètre utilise de la mémoire oui, mais la mémoire est libérée lors de la sortie de fonction si le destructeur est bien fait...
    Etrange que tu n'aies pas de fuite mémoire indiquée dans le debugger.
    Quelles sont les choses que tu fais en release et pas en debug? Les MFC sont elles liées dynamiquement (ou statiquement) dans les deux cas? Vérifie que les options de compilation/link sont les mêmes ( à l'exception bien sûr du mode...).

  11. #11
    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
    dans tes threads tu sors comment ?
    tu ne ferais un exitthread par hasard ?


  12. #12
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Points : 256
    Points
    256
    Par défaut
    si je ne me trompes pas, et si tu l'utilises bien sûr, AfxBeginThread() crée un objet CWinThread qu'il est nécessaire de libérer ...

    ps : Au fait, à quoi ça sert ce qu'à écrit farscape :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #ifdef _DEBUG 
    #define new DEBUG_NEW 
    #undef THIS_FILE 
    static char THIS_FILE&#91;&#93; = __FILE__; 
    #endif
    C'est utile ? paske j'ai plein de programmes dont les .cpp ont pas ça !

  13. #13
    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
    ca sert a avoir la trace des fuites de memoire en mode debug trace.
    le fameux memory leaks avec le nom du source l'emplacement de l'allocation
    non relachée et meme la gestion du double click sur la ligne pour aller directe
    dessus.
    alors pourquoi s'en priver ?

  14. #14
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 189
    Points : 126
    Points
    126
    Par défaut
    POur ce qui est du thread il est créé par CreateThread et tué par Terminate thread.

    Je travail en mode debug, et mes MFC sont liées statiquement pour que je puisse m'etre mon application sur d'autres ordis ou il n'y a pas de Visual C++6.0.

    J'ai constaté un truc aussi, quand je minimise mon applic elle diminue de 3/4 en mémoire et quand je la maximise il ne remonte pas il reste au 3/4. Comment ca se fait??? En tt cas c pas mal lol

  15. #15
    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
    Citation Envoyé par pitch21
    POur ce qui est du thread il est créé par CreateThread et tué par Terminate thread.
    alors ton pb peux venir de la !
    Terminate thread doit etre utilisé en dernier ressort pour detruire un thread.
    extrait MSDN:
    TerminateThread is a dangerous function that should only be used in the most extreme cases. You should call TerminateThread only if you know exactly what the target thread is doing, and you control all of the code that the target thread could possibly be running at the time of the termination. For example, TerminateThread can result in the following problems:

    * If the target thread owns a critical section, the critical section will not be released.
    * If the target thread is allocating memory from the heap, the heap lock will not be released.
    * If the target thread is executing certain kernel32 calls when it is terminated, the kernel32 state for the thread's process could be inconsistent.
    * If the target thread is manipulating the global state of a shared DLL, the state of the DLL could be destroyed, affecting other users of the DLL.

    A thread cannot protect itself against TerminateThread, other than by controlling access to its handles. The thread handle returned by the CreateThread and CreateProcess functions has THREAD_TERMINATE access, so any caller holding one of these handles can terminate your thread.

  16. #16
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 189
    Points : 126
    Points
    126
    Par défaut
    Oui mais alors vous savez me donner une methode qui quitte un thread en prenant son ID.

  17. #17
    Rédacteur
    Avatar de abelman
    Inscrit en
    Février 2003
    Messages
    1 106
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 1 106
    Points : 2 629
    Points
    2 629
    Par défaut
    pour arrêter tes threads proprement, il faut qu'il se termine d'eux même.

    Ce que tu peux faire c'est mettre en place une synchronisation avec tes threads.

    Par exemple si dans ton thread tu as une boucle, utilise un CEvent et à chaque itération vérifie si il est signalé ou non. Si il est signalé, sort du thread.

    Pour le signaler en dehors du thread (ce qui revient à arrêter le thread) tu fais TonCEvent.Set(). Puis tu fais un WaitForSingleObject sur le thread pour attendre sa fin.

  18. #18
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 189
    Points : 126
    Points
    126
    Par défaut
    Dans mon thread il n'y a pas vraiment de boucle, il y a une attente de notification (changement sur un rep) donc je ne peux pas me permette d'attendre un event. A moins que l'on puisse mettre 2 notifications????

  19. #19
    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
    bien sur voir WaitForMultipleObjects
    pour infos c'est que j'utilise dans le post sur la gestion du port serie avec un thread de traitement.
    un event pour la reception d'un evenement serie et un event pour sortir du thread .

  20. #20
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 189
    Points : 126
    Points
    126
    Par défaut
    En effet ca marche pas trop mal j'ai ma memoire qui monte et qui descend donc bon signe

    Mais plus haut j'avais marque un truc qui m'intriguait aussi -> Pourquoi quand on minimise et puis maximise la taille de l'applic diminue considerablement en memoire

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [C#][.NET 2.0]Augmentation de mémoire
    Par genki dans le forum Général Dotnet
    Réponses: 6
    Dernier message: 25/04/2007, 11h04
  2. commetn augmenter la mémoire
    Par chouchou93 dans le forum Eclipse Java
    Réponses: 14
    Dernier message: 27/06/2006, 13h09
  3. [MFC] Augmenter la taille des fonts
    Par OverLorD34 dans le forum MFC
    Réponses: 3
    Dernier message: 06/04/2006, 11h28
  4. Réponses: 21
    Dernier message: 01/02/2006, 10h17
  5. [MFC] Problème de mémoire
    Par benahpets dans le forum MFC
    Réponses: 8
    Dernier message: 03/11/2005, 18h08

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