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

DirectX Discussion :

Enormes fuites mémoires


Sujet :

DirectX

  1. #21
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 113
    Points : 32 958
    Points
    32 958
    Billets dans le blog
    4
    Par défaut
    Si tu attends un objet, il faut signaler l'objet un moment. Sinon tu peux attendre longtemps.
    Si tu attends un thread, faut que le thread se termine. Et pour cela seul le debugger pourra t'aider. Pour savoir où et pourquoi le thread est bloqué.
    Ta callback de thread est au mieux étrange dans tous les cas. Il y a un paramètre qui devrait être l'instance de la classe. Pour pouvoir utiliser une variable membre qui indique quand il doit s'arrêter par exemple. Et non une globale.
    Si la variable a été déclarée avec thread_local, elle est spécifique au thread.
    Utiliser les threads et objets STL simplifiera aussi les choses.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  2. #22
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 112
    Points : 43
    Points
    43
    Par défaut
    Merci pour les conseils, mais pourquoi une variable static est une mauvaise idée dans mon cas ?

  3. #23
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 112
    Points : 43
    Points
    43
    Par défaut
    Et sinon est ce que c'est mieux pour l'arrêt du thread, si je déclare ma variable avec thread_local ?

  4. #24
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 113
    Points : 32 958
    Points
    32 958
    Billets dans le blog
    4
    Par défaut
    Une globale n'est presque jamais une bonne idée. Et tu n'es pas dans un cas acceptable d'utilisation ici.
    Si tu la déclares thread_local tu vas avoir du mal à lui faire changer de valeur depuis un autre thread...
    On n'a pas une vision complète du programme - et je n'en veux pas parce que c'est un gros morceau normalement, je ne lirai clairement pas des centaines de lignes pour trouver le(s) problème(s).
    Mais disons que manipuler de threads c'est pas aisé et ça se fait pas au petit bonheur.

    Gérer un thread n'est pas plus compliqué que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include <thread>
     
    int main()
    {
      bool exitApp = false;
      std::thread t([&]() { while (!exitApp) { ... } });
      ...
      exitApp = true;
      t.join();
      return 0;
    }
    Si tu restes coincé dans ton thread, c'est pas le thread le problème, c'est le code exécuté dans le thread.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #25
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 112
    Points : 43
    Points
    43
    Par défaut
    C'est ce que je faisais, mais apparemment le thread se termine quand je fais exitThread = true dans le destructeur mais si je fais après exitThread = false avant la recréation de l'objet qui charge le niveau, le thread ne se termine pas.
    Pour le moment, je regarde les memory leaks que j'ai et j'ai beau savoir que ça vient des textures qui semblent ne pas se libérer de la mémoire, je ne trouve pas de solution efficace pour éviter que la taille de l'app ne grossisse pas.
    Par contre il y a un détail intéressant : si je mets un breakpoint à la fin du destructeur et que j'attends plusieurs minutes, la taille de l'app décroit de plusieurs centaines de mégaoctets.
    Le problème étant que je ne peux pas attendre plusieurs minutes vis à vis des utilisateurs et que la taille de l'app grossit quand même trop quand je laisse le programme continuer de s'exécuter.

    Auriez vous une idée ou voyez vous ce qui ne va pas ?

  6. #26
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 113
    Points : 32 958
    Points
    32 958
    Billets dans le blog
    4
    Par défaut
    Si tu repasses exitThread à false avant qu'il ne le reteste, forcément il continuera son exécution...
    Tout cela ne se produirait pas si tu n'utilisais pas une globale inutile à cette fin.
    Quant à utiliser le gestionnaire pour voir la mémoire : c'est pas mal le pire possible. Ce truc c'est juste ce que le système te réserve, et ce n'est pas ce que l'app utilise à un instant T. Pour ça il faut un vrai profiler.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  7. #27
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 112
    Points : 43
    Points
    43
    Par défaut
    Merci pour ta réponse, je vais vérifier avec un profiler ( je l'avais déjà fait, il n'y avait pas grand chose ), je vais aussi vérifier si l'enchaînement de plusieurs niveaux se fait sans planter et si en retirant de la RAM ( j'ai 12 Go ) il n'y a pas de plantage.

  8. #28
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 352
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 352
    Points : 20 359
    Points
    20 359
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    LoadingThreadsParameters loadingThreadsParameters0;
    LoadingThreadsParameters loadingThreadsParameters1;
    LoadingThreadsParameters loadingThreadsParameters2;
    LoadingThreadsParameters loadingThreadsParameters3;
    vous savez que les tableaux dynamiques ça existe ?

  9. #29
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 112
    Points : 43
    Points
    43
    Par défaut
    Oui je sais, vous avez raison.

  10. #30
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 112
    Points : 43
    Points
    43
    Par défaut
    J'ai mis des smartpointers partout, mon programme prend de plus en plus de mémoire quand je le lance, mais il se stabilise ensuite.
    Merci pour vos aides, je reviendrai si j'ai des soucis mais à priori ça a l'air d'aller.

Discussions similaires

  1. [tomcat][memoire] java.net.URL et fuite mémoire
    Par Seiya dans le forum Tomcat et TomEE
    Réponses: 6
    Dernier message: 09/03/2009, 11h41
  2. [Fuites mémoire] Je cherche un utilitaire
    Par 10_GOTO_10 dans le forum C++Builder
    Réponses: 8
    Dernier message: 10/02/2005, 11h03
  3. Outil de recherche de fuite mémoire
    Par eag35 dans le forum MFC
    Réponses: 4
    Dernier message: 02/02/2005, 13h46
  4. [SWT]SWT et fuite mémoire(ou pas)
    Par menuge dans le forum SWT/JFace
    Réponses: 2
    Dernier message: 22/06/2004, 22h40
  5. [debug] fuites mémoires
    Par tmonjalo dans le forum C
    Réponses: 3
    Dernier message: 28/07/2003, 18h20

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