Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 8 sur 8
  1. #1
    Membre éclairé

    Inscrit en
    janvier 2008
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : janvier 2008
    Messages : 673
    Points : 348
    Points
    348

    Par défaut Xna GC.GetTotalMemory xbox vs PC

    Bonjour, je rencontre un petit soucis avec la memoire de mon jeu.

    Quand je suis sur PC et que j'affiche la memoire avec GC.GetTotalMemory(false) ca ne bouge quasiment pas dans le jeu(au loading ca fuse).


    Mais quand je teste sur xbox ca augmente super vite pendant le jeu, j'ai meme un passage de GC toutes les 5 secondes environ.

    Avez vous une idee d'ou cela peut venir? Sachant que les tests sur xbox et pc sont les memes ...

    Merci.

  2. #2
    Membre Expert

    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    février 2006
    Messages
    679
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : février 2006
    Messages : 679
    Points : 1 171
    Points
    1 171

    Par défaut

    C'est tout à fait normal.
    Le framework .net de la xbox est le micro framework .net qui ne dispose pas d'un garbage collector aussi efficace.
    Concrètement si tu veux que ton jeu tourne correctement sur xbox il ne faut JAMAIS allouer de mémoire durant la boucle principale de jeu.
    Cela signifie :
    - Allouer une taille suffisante pour les listes à la création
    - Avoir un système de pooling pour réutiliser les objets déjà crées plutôt que les instancier.
    - Eviter le boxing qui alloue de la mémoire
    - Faire attention avec les strings qui alloue de la mémoire à chaque concaténation.

    Bon courage !!

  3. #3
    Membre éclairé

    Inscrit en
    janvier 2008
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : janvier 2008
    Messages : 673
    Points : 348
    Points
    348

    Par défaut Yop

    Je comprend bien ce que tu me dis puisque j'ai lu pas mal de doc sur le garbage .net

    Mais lorsque je profile j'obtiens cela :




    Soit Game.Run qui prend quasiment 100% des allocations et donc je ne peux rien modifier dans ce code puisque apres il appelle ses propres fonctions.

    Mais lorsque j'affiche le GC.GetTotalMemory sur pc il ne grandit pas in game... et sur xbox si.


    Au depart j'avais des events des ToString et des new List(0);

    Du coup j'ai change tout ca pour faire disparaitre mon garbage, mais la je ne peux plus rien faire car c'est .Net qui fait ca tambouille .

    En faite si il n'alloues pas de memoire sur PC (GC.GetTotalMemory constant) je ne vois pas pourqu'oi il en allouerait sur Xbox.

    Bref , merci.

  4. #4
    Membre Expert

    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    février 2006
    Messages
    679
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : février 2006
    Messages : 679
    Points : 1 171
    Points
    1 171

    Par défaut

    Citation Envoyé par saturn1 Voir le message
    Soit Game.Run qui prend quasiment 100% des allocations et donc je ne peux rien modifier dans ce code puisque apres il appelle ses propres fonctions.
    Game.Run appelle l'update de game, ça vient donc de ton code.
    J'ai eu un problème similaire je ne me souviens plus du problème exacte mais je l'ai trouvé en commentant toute l'update et en dé-commentant petit à petit.
    Tu vas t'amuser

  5. #5
    Membre éclairé

    Inscrit en
    janvier 2008
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : janvier 2008
    Messages : 673
    Points : 348
    Points
    348

    Par défaut re

    Hum...

    Toi quand tu profiles in game la courbe a un Y de 0?^^

    Donc ce serait un bug du profiler de visual xD?

  6. #6
    Membre Expert

    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    février 2006
    Messages
    679
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : février 2006
    Messages : 679
    Points : 1 171
    Points
    1 171

    Par défaut

    Si tu as un freeze parce que le GC passe il n'y a pas de bug d'affichage, tu as bien un soucis.
    J'utilise Xna framework remote performance monitor et quand je n'ai plus de soucis je vois bien que rien n'est alloué !

  7. #7
    Membre éclairé

    Inscrit en
    janvier 2008
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : janvier 2008
    Messages : 673
    Points : 348
    Points
    348

    Par défaut

    Ok merci je vais tester ca!

  8. #8
    Membre éclairé

    Inscrit en
    janvier 2008
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : janvier 2008
    Messages : 673
    Points : 348
    Points
    348

    Par défaut re

    C'est bon j'ai un defi => 30 Gc.Collect en 30 secondes^^

    (merci pour le nom du tools MoDDiB)

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •