Mon prog me bouffe de la ram et du temps CPU
Mon prog me bouffe de la ram et du temps CPU
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.
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.
-
- Messages : 1307
- Inscription : dim. 08/juil./2007 18:32
- Localisation : Toulouse
Re: Mon prog me bouffe de la ram et du temps CPU
je confirme: à 510Mo sur les 512Mo de mon vieux PC, il n'a vraiment pas apprécié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.

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 ?
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 ?

ton probleme viens d'un plantage de ton prg !!
en ligne 267 sur:
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 ..
en ligne 267 sur:
Code : Tout sélectionner
DrawImage(ImageID(MapID),0,0)
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 ..

-
- Messages : 1307
- Inscription : dim. 08/juil./2007 18:32
- Localisation : Toulouse
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.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).
quand à la version 4.20, c'est encore trop frais pour que j'émette un avis.
OK j'ai trouvé son code !
http://www.purebasic.fr/french/viewtopic.php?t=7877
Je regarde ça de plus près.
http://www.purebasic.fr/french/viewtopic.php?t=7877
Je regarde ça de plus près.
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 (
) 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 ?
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 (

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 ?