CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Programme qui ram méchamment

Virtuality
Virtuality
Niveau 8
30 mai 2005 à 20:29:25

Salut,

voila, je développe un petit programme ( jeu) avec la SDL. Le jeu est donc en C++.
Voila que tout ( relatif) va bien, mais un vieil ami à décidé de me rendre visite.
Et il faut dire qu´il est assez encombrant...^^
Bref, j´ai prété une démo de mon jeu à un copain, et la première remarque ( enfin, après le compliment) était que ça rammait pas mal. Etonné par cette remarqe ( car chez moi je n´ai aucun ralentissement quelquonque), j´ai décidé de regarder qq trucs sans vraiment savoir ou chercher.
J´ai donc continué.
Et voila que maintenant, chez moi aussi ça ram :-)
Donc j´ose pas imaginer sur des configs moins élevées....
( J´ai un intel P4 2,8Ghz et 1Go DDR, c´est pas immense, mais pour ce genre de jeux c´est largement assez^^)
Bref, donc j´ai vraiment besoin d´optimiser mon code, et la, avec 1700 lignes de code, je sais pas vraiment où chercher...
Je résume donc en qq mots le programme :
Je commence donc par charger l´image en Vram ( comme dans le tuto de JYY, à la différence que j´ai simplement remplacé la ligne
SDL_Surface* f = SDL_LoadBMP(fichier);
par
SDL_Surface* f = IMG_Load(fichier);
( me permettant un plus vaste choix de formats d´image).
Bon voila, et c´est ainsi que je charge au lancement de mon programme 37 images ( d´un seul coup).
La plupart des mes images sont des images au format . bmp, simplement parce que j´ai remarqué que les images . png font rammer mon programme... à moooort.
Maintenant, à la suite du programme, j´ai des énormes séries de conditions ( collisions, vies, monstres, etc...) et de boucles ( assez grosse quand même), mais aucun calcul ( tel que des racines, des cosinus, ou autres fonctions mathématiques prenant du temps).
J´ai essayé un instant de retirer le système de collision, et ça ram autant.
Il ma suffit de rajouter 5 lignes à mon code pour que même chez moi il ne soit plus fluide.
Et alors je me suis demandé si ça pouvait venir du chargement d´image qui fasse ralentir le programme, et comment je pourrais remédier dans ce cas à ce problème.
Si vous avez des idées....
Je sais que c´est bcp de texte pour peu d´explications, dsl, je fais ça aussi pour mettre mon problème en français ( ça me permettra p e de trouver la solution :-p )
Merci d´avance.
++

tomtomclancy
tomtomclancy
Niveau 9
30 mai 2005 à 20:33:13

lol, ca c´est mi a ramer tout a coup ?

et quand tu redemmarre ton ordi ca rame plus ?

tout con, c´est que tu as des fuites de memoire.

Je sais que visual t´indique les fuite de memoire " memory leak" pour dev C++ je sais pas

En tout cas c´est simple verifie qu´a chaque fois our tu fais un new, tu fais un delete.
Tout ce que tu construit doit etre detruit, sinon ca reste en RAM, et CA RAME :rire:

Poubi
Poubi
Niveau 6
30 mai 2005 à 20:34:55

Bonsoir,

Il me semble que c´est bel et bien le chargement d´images qui ram, tout dépend de la taille de ces images, pour te donner un ordre d´idée en VB ( Tel que Elysium ) , trois . bmp ( un de 8Mo et deux de 6Mo ) pompent 150Mo de RAM . ..

Enfin j´en sais rien, ça fait un gros moment que j´ai pas touché à du C++ xD

Bonne soirée,
Poubi.

Poubi
Poubi
Niveau 6
30 mai 2005 à 20:35:54

Ah ouais pas con ^^ Je n´y avais pas pensé, merci de la réponse TomtomClancy ^^

Perdu_de_linfo
Perdu_de_linfo
Niveau 9
30 mai 2005 à 20:39:53

Ho, pis merde, marre d´attendre 10min^^
Oui pour le chargement d´image j´en suis conscient, le bmp c´est lourd....
Mais j´ai vu que 10bmp ca équivalait 1 . png

TomtomClancy non, c´est pas tout a coup, c´est apères une modification.

Pour les new et delete non c´est pas ça à coup sûre...
Par exemple mtn chez moi ça ram plus, pis d´un coup j´ai un monstre ralentissement de 3 sec, et ça reprend....
Je comprend vraiment pas...
Si je redémarre mon pc et que ca ram plus c´est que j´ai des fuites?
bizarre que ça le fasse sur d´autres pc?

Virtuality
Virtuality
Niveau 8
30 mai 2005 à 21:02:36

. ..
J´ai fait qq modifications... et mtn ça marche chez tout le monde lol!
Problèmes de boucles je crois :-)
Merci bcp ( j´adore ce forum, on trouve les réponses en s´auto-lisant :-) :-) )
Merci encore^^ :-p

JeanYvesYves
JeanYvesYves
Niveau 10
30 mai 2005 à 21:08:06

Salut !

Alors, je voudrais réagir :

" png font rammer mon programme... à moooort"
--> FAUX, et archi faux.
Je m´explique, et ça me donne une piste :

Quand tu charges une image, que ce soit une BMP, une PNG, ou une JPG, ou une truc_chose gérée par SDL_Image ou autres, a la sortie, la SDL_Surface* est LA MEME : c´est un bitmap.

Son cout en mémoire est de X*Y*4 octets si ton image est 32 bits + 1 partie header de structure négligeable, donc ça ne prend pas 150 Mo de RAM pour une BMP de 8 Mo, mais bien a peu pres 8 Mo.

La ou le PNG peut etre plus lent, c´est au chargement : car il y a, pendant le chargement, une phase de décompression. Mais j´insiste : a la fin du chargement, que tu aies chargé une BMP ou une PNG, ça revient au meme.

Donc, en toute logique, je me dis que, si ça rame quand tu charges des PNG, sous entendu, dans le jeu, ça veut dire que tu charges des images PENDANT le jeu, autrement dit dans la boucle principale : vérifie cela.
Si c´est le cas, ça explique un effondrement effroyable de mémoire, et ça explique ça rame.

Donc pense bien a charger tes images AVANT de lancer la boucle principale, de façon a ce que tes images, en RAM ou en VRAM, soient bcp + rapides d´acces ( l´acces au disque dur doit etre 1000 fois plus lent que l´acces en RAM, et je ne te parle meme par de la différence avec la VRAM...)

Déja, vérifie ça.
Si tu as bcp d´images a charger, dis toi qu´elles n´auront peut etre pas toute le privilege d´aller en VRAM : assure une priorité : au lieu de charger dans n´importe quel ordre, charge d´abord celles qui doivent absolument etre en VRAM...

Ensuite, pour les collisions, si tu dis que, en les enlevant, ça ne ralentit par vraiment +, ça veut dire que tu ne forces pas trop a ce niveau, ce n´est donc pour le moment pas fondamental de trop optimiser cette partie ( peut etre plus tard)

Ensuite, il faut voir les choses, un point :
Des fois on a l´impression que ça rame, alors que non :
Je m´explique :
si tu es en 800*600 par exemple. Et que tu décides de bouger ton sprite de 1 pixel en X par frame :
ton sprite ira tout doucement. Tu te diras : ça rame ! alors qu´en fait, tu seras peut etre a 50 frames par secondes ( ce qui ne rame pas du tout ! )
Mais calcule : pour faire 800 pixels, a 1 pixel par frame, ça fait 800 frames. Et a 50 frames par secondes, tu mettras 16 secondes a traverser...
ça rame ? non ça avance :)
--> faut juste avancer de + de pixels a la fois :)

Bon j´arrete le roman pour le moment, vérifie bien tes chargement d´images : JAMAIS pendant la boucle.

Virtuality
Virtuality
Niveau 8
30 mai 2005 à 21:18:36

Merci pour tes remarques JYY :ok:
J´avais pas pensé à la place de la vram...
Et ça peu probablement venir de là...
Il faudrait que j´essaie, voir ce que ça donne.
Mais la vram serait-elle tant limitée?
Pour le load, non t´inquiête, c´est au lancement du programme que je charge tout, après c´est fini.
Merci pour l´éclaircissement ( nécessaire)!
Je programmerai moins stupide :-p

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Création de sites web
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment