Mon prog me bouffe de la ram et du temps CPU

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Octavius
Messages : 312
Inscription : jeu. 26/juil./2007 12:10

Mon prog me bouffe de la ram et du temps CPU

Message par Octavius »

J'ai fait un programme dont le but est d'éditer des cartes en 2D. Lorsque j'utilise le bouton 'Zoomer' pour zoomer sur ces cartes, le temps de calcul augmente avec la taille du zoom, et pire, le programme occupe une bonne partie de ma ram. Un pote à moi qui a tester mon programme ne peut pas zoomer au maximum parce qu'il a une ram plus petite que la mienne : le programme se bloque.

Cette archive contient mon code source, un éxecutable, et les fichiers annexes utilisés par le programme :
http://keonet.free.fr/Geomod/geomod.rar

Pouvez-vous m'aider à comprendre ce qui cloche ?

PS: lorsque le prog vous demande au début de choisir un dossier, cliquez sur OK sans réfléchir, c'est automatiquement le bon dossier.
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

Re: Mon prog me bouffe de la ram et du temps CPU

Message par beauregard »

Octavius a écrit :Un pote à moi qui a tester mon programme ne peut pas zoomer au maximum parce qu'il a une ram plus petite que la mienne : le programme se bloque.
je confirme: à 510Mo sur les 512Mo de mon vieux PC, il n'a vraiment pas apprécié 8O
Octavius
Messages : 312
Inscription : jeu. 26/juil./2007 12:10

Message par Octavius »

J'ai 2 Go de ram, le programme ne se bloque pas, mais ça fait quand même ramer mon PC pendant le zoom...

J'ai fait un petit calcul vite fait, en gros je travaille avec une carte qui comporte 5 calques (répartis dans 5 fichiers TGA). Lorsque j'aggrandit mes sprites au zoom maximum (16 fois), mes cartes de base font environ 590*380 pixels, ça me fait (chaque pixel vaut 3 octets, 24 bits) :
820 Mo !!!!

Euh... vous avez pas une idée pour m'aider ? :(
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

ton probleme viens d'un plantage de ton prg !!

en ligne 267 sur:

Code : Tout sélectionner

 DrawImage(ImageID(MapID),0,0)
apparement purebasic perds L'id de l'image
il faut dire qu'a ce moment precis ton image fait :
9456 X 6064

ya peut etre une limite de taille des images en purebasic !!

le fait est que ta methode de zoom n'est pas genial !!
il te faudrai Clipper l'image de façon a n'afficher que ce qui se trouve dans ton cadre
la on se rends bien compte que l'image est enorme, et tu cadre qu'une petite partie..

il faudrai peut etre mieux zoomer , le resultat du premier zoom
puis les resultat du resultat etc ... plutot que d'augmenter indefiniment la taile de l'image dans son entier ...
tu ferai une sacre economie de place memoire !!
en clair oblige toi a ne pas avoir d'image plus grande que 1024x768 par exemple , et de zoomer le contenu de ces 1024x768
pas besoin pour ça de transformer une image 1024x768 en une image qui fasse 9456 X 6064 ... :)

et tu ne depasserai pas la limite maxi qu'apparement Purebasic (ou la RAM ) impose ... voila , désolé, pas le temps d'en faire plus .. :)
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Message par Ar-S »

Dans la doc les amis :

Note : La taille des images est actuellement limitée à 8192x8192 pixels (si la mémoire disponible le permet).
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

Message par beauregard »

Ar-S a écrit :Dans la doc les amis :

Note : La taille des images est actuellement limitée à 8192x8192 pixels (si la mémoire disponible le permet).
je rajouterai que pour la version 4.10 de pb, dans la pratique( utilisation de clipsprite, Dobro est de bon conseils), c'est plutôt 4096*4096.

quand à la version 4.20, c'est encore trop frais pour que j'émette un avis.
Octavius
Messages : 312
Inscription : jeu. 26/juil./2007 12:10

Message par Octavius »

Ah ok je vois... Je vais réfléchir à cette solution avec clipsprite...
Oliv
Messages : 2117
Inscription : mer. 21/janv./2004 18:39

Message par Oliv »

Le soldat inconnu avait posté le code d'une loupe, regarde comment il avait fait, ça pourrait te donner des idées pour l'optimisation de ton zoom :wink:
Octavius
Messages : 312
Inscription : jeu. 26/juil./2007 12:10

Message par Octavius »

OK j'ai trouvé son code !
http://www.purebasic.fr/french/viewtopic.php?t=7877

Je regarde ça de plus près.
Octavius
Messages : 312
Inscription : jeu. 26/juil./2007 12:10

Message par Octavius »

J'ai progressé, enfin pour ainsi dire...

Voilà mon nouveau programme (exécutable, source, et fichiers annexes inclus) : http://keonet.free.fr/Geomod/geomod2.rar

Suite à vos conseils, je n'agrandis plus toute l'image lorsque je zoome, mais seulement la partie qui sera affichée. Pour cela j'utilise la fonction GrabImage().

Ce nouveau code, que j'ai eu beaucoup de mal à écrire ( :oops: ) a en quelque sorte déplacer le problème : maintenant, dès qu'on bouge un peu à gauche, ou à droite, ou en haut, ou en bas la partie de l'image affichée change, et il est donc nécessaire de relancer la procédure avec GrabImage()... Résultat : se déplacer est fastidieux, le nombre de calculs effectués reste important.

Pourriez-vous encore m'aider ? Y a-t-il une astuce plus rapide que la fonction GrabImage() ? N'y a-t-il pas un autre moyen de procéder ?
Octavius
Messages : 312
Inscription : jeu. 26/juil./2007 12:10

Message par Octavius »

C bon, j'ai réussi à optimiser l'utilisation de GrabImage().

J'ai fait une tentative en écrivant directement sur la mémoire vidéo mais ça n'a rien donné, ce n'était pas plus rapide.
Répondre