Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: Fuite de mémoire avec sf.Image  (Lu 4400 fois)

0 Membres et 1 Invité sur ce sujet

Crone123

  • Full Member
  • ***
  • Messages: 141
    • Voir le profil
Fuite de mémoire avec sf.Image
« le: Janvier 21, 2015, 02:06:23 pm »
Bonjour,
J'ai voulu faire un programme qui calcule le nombre de pixels en couleurs, et nombre de pixels en noir et blanc sur une image.

Assez simple:
Il charge une image
Il compare les valeurs r,g,b et il affiche le nombre de couleur/noir et blanc qu'il a compté.


J'utilise Python3 sur Ubuntu 14.04 LTS 64bits, avec le package suivant de PySFML:

Package: python3-sfml
Priority: optional
Section: universe/python
Installed-Size: 1073
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Debian Games Team <pkg-games-devel@lists.alioth.debian.org>
Architecture: amd64
Source: python-sfml
Version: 1.5.1.is.1.3+dfsg-1build2
Provides: python3.4-sfml
Depends: libc6 (>= 2.14), libgcc1 (>= 1:4.1.1), libsfml-audio2 (>= 2.1), libsfml-graphics2 (>= 2.1), libsfml-network2 (>= 2.1), libsfml-system2 (>= 2.1), libsfml-window2 (>= 2.1), libstdc++6 (>= 4.1.1), python3 (>= 3.4~), python3 (<< 3.5)
Filename: pool/universe/p/python-sfml/python3-sfml_1.5.1.is.1.3+dfsg-1build2_amd64.deb
Size: 245558
MD5sum: 148b0c85f6df19774efb77e3bb4fdef0
SHA1: a48fe0b0ded426fd53e0b6b59809f9984f082e48
SHA256: 546c1f43ce23412f9ad65e9e467a79213ab870f9ee2cd1182065b4a2ed5500f8
Description-en: Simple and Fast Multimedia Library - Python 3 Bindings
 SFML is an modern multimedia library offering a wide range
 of subsystems useful to produce an multimedia application.
 It offers OpenGL integration for hardware accelerated Graphics,
 Windowing and input support, audio and network facilities and
 supports besides GNU/Linux MS Windows and Mac OS X, too.
 .
 This package contains the Python 3 bindings for SFML.
Description-md5: 403dc02a5b8bdf526afffa2f14af877e
Homepage: http://www.python-sfml.org/
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Origin: Ubuntu

(Si il existe une version + a jour que celle des dépôts, je veux bien tester, seulement le ppa du site officiel ne contient pas de version pour Ubuntu 14.04 LTS)

Mon programme commence a prendre environ 2Go de RAM, pour un petit script en console qui ne fait que charger quelques images, donc je me suis dit: Fuite de mémoire.

J'ai fait des tests et voici ce que ça donne:

Créer un sf.Image et le delete → Pas de soucis niveau ram.
Créer un sf.Color et le delete → Pas de soucis niveau ram.

En supposant que mon sf.Image s'appelle img
Si j'accède a img[0,0] ou img[(0,0)] un certain nombre de fois: Fuite de mémoire.
Je me suis dit qu'il fallait peut être supprimer le sf.Color crée, alors j'ai fait:

c = img[0,0]
del c

En boucle, et pareil, fuite de mémoire. (testé depuis le cli) (au bout de 150000 tours ou + environ, on prends des centaines de mo de RAM, alors que l'objet devrait être supprimé et ne plus consommer de ram)

Pour résumer: L'accès a img[x,y] ou img[(x,y)] me cause une fuite de mémoire, et vu que j'y accède souvent ça me prends des quantités de ram assez abominables !

Est-ce que ce bug est connu? Est-ce qu'il existe un autre moyen d'utiliser cette fonction (ou un équivalent) sans causer de fuite de mémoire? Une autre façon de coder en Python qui va fonctionner?
Sinon y a t-il une solution alternative, une mise a jour de PySFML qui résous ce bug? (si ma version n'était pas a jour) Etc...

Merci d'avance :)

davs63

  • Newbie
  • *
  • Messages: 17
    • Voir le profil
Re : Fuite de mémoire avec sf.Image
« Réponse #1 le: Février 17, 2015, 06:07:06 pm »
Donne moi un code tout prêt, je vais tester sous window. Je n'ai jamais eu de fuite de mémoire

Crone123

  • Full Member
  • ***
  • Messages: 141
    • Voir le profil
Re : Fuite de mémoire avec sf.Image
« Réponse #2 le: Février 17, 2015, 09:21:50 pm »
En fichier joint, un fichier Python qui contient la fuite de mémoire.
→ Il lit une image, lis chacun des pixels et estime la quantité de pixels en couleur et en noir et blanc (a partir des égalités sur les valeurs RGB)
J'ai d'abord pensé que c'était mon code, mais j'ai fait le test directement depuis l’interpréteur Python en tapant un ligne de code en boucle, et il semble que ça soit la lecture d'un pixel sur l'image qui soit la cause du problème....
J'ai testé en lisant en boucle le pixel (1,1) de l'image et ça fuit...
Évidement c'est pas flagrant avec une boucle qui fait 10tours, mais avec 100000 ou 10000000 de tours c'est hyper flagrant.
D'ailleurs, je l'ai remarqué parce que j'ai essayé de tester le comportement de mon script sur une centaine d'image, et au bout de 10 ça commençait a ralentir a mort, j'ai cherché pourquoi et j'ai vu que le programme prenait quelques centaines de mo de RAM, et que + il tournait et + il consommait sans jamais en libérer...