Bitmap.RotateFlip augmente en mémoire [Résolu]

Signaler
Messages postés
35
Date d'inscription
samedi 26 février 2005
Statut
Membre
Dernière intervention
12 août 2006
-
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
-
Bonjour;

Je fais tourner ce bout de code dans un Thread()
Lorsque j'utilise RotateFlip, la mémoire augmente continuellement.
Apparement RotateFlip doit allouer de la mémoire pour fonctionner mais elle ne semble pas être liberée après.
Quand je met mon RotateFlip en commentaire, la mémoire n'augmente plus et mon process reste stable.
Y'at-il une operation à effectuer après un RotateFlip pour éviter cette fuite mémoire?

vid = video.GetBitMap();
Bitmap image = new Bitmap(cam.Width, cam.Height, cam.Stride, PixelFormat.Format24bppRgb, vid);
image.RotateFlip(RotateFlipType.RotateNoneFlipY);

Merci :)

12 réponses

Messages postés
475
Date d'inscription
jeudi 19 juin 2003
Statut
Membre
Dernière intervention
3 novembre 2008

essaie :
image.Dispose();
image = null;

tu pourras tjrs demander de temps a autre au Collecteur de Poubelle de passer faire sa job.
C'est GC.Collect() si ma mémoire est bonne.
Le problème peut très bien venir de ta classe video.
Je te conseille d y aller par élimination pour déterminer quelle ligne est la responsable de la fuite.

[:D]
@++
Messages postés
35
Date d'inscription
samedi 26 février 2005
Statut
Membre
Dernière intervention
12 août 2006

Le GC.Collect() ameliore mais au bout d'un certain temps ca plante.
Je vais essayer de faire un Clone() de ma Bitmap pour ne pas qu'il la perde...
Messages postés
277
Date d'inscription
lundi 9 février 2004
Statut
Membre
Dernière intervention
4 mai 2008

Slt,

Declare ton bitmap en dehors de ton thread et enleve ton "Bitmap" devant ton "image"

duck88
Messages postés
35
Date d'inscription
samedi 26 février 2005
Statut
Membre
Dernière intervention
12 août 2006

Oui mais si je declare mon Bitmap en dehors de mon Thread j'aurai toujours la même image.

Je ne sais pas assigner un IntPtr (variable vid dans mon code) à un Bitmap autrement que par son contstructeur.
Je pourrai declarer le Bitmap avant en effet mais je ne sais pas comment faire autrement que par le constructeur.
Messages postés
277
Date d'inscription
lundi 9 février 2004
Statut
Membre
Dernière intervention
4 mai 2008

En dehors du thread



Bitmap image ;







Dans le thread



image = new Bitmap(cam.Width, cam.Height, cam.Stride, PixelFormat.Format24bppRgb, vid);
 image.RotateFlip(RotateFlipType.RotateNoneFlipY);





A chaque fois que ton thread passe dans le code que tu a ecrit il crée une nouvelle instance de "image", c'est ca qui fait augmenté ta mémoire

duck88
Messages postés
475
Date d'inscription
jeudi 19 juin 2003
Statut
Membre
Dernière intervention
3 novembre 2008

Ça ne change absolument rien ducker88
Tu continues tjrs à créer un nouveau objet à chaque tour (l'opérateur new en témoigne).
Messages postés
35
Date d'inscription
samedi 26 février 2005
Statut
Membre
Dernière intervention
12 août 2006

[auteurdetail.aspx?ID=124151 badrbadr]


Le soucis c'est que je suis dans une méthode et que je dois faire un return image
Si je fais le dispose il va me peter une erreur
Je vais tenter de le faire à l'arrivée au cas ou.

Sinon c'est bien ca la cause car lorsque j'enleve la ligne de RotateFlip, la mémoire n'augmente plus...

[auteurdetail.aspx?ID=228792 ducker88]
J'ai fais comme tu as dis mais la mémoire augmente toujours.
Je reprécise que si je met en commentaire la ligne suivante, la mémoire n'augmente plus
image.RotateFlip(RotateFlipType.RotateNoneFlipY);
Messages postés
35
Date d'inscription
samedi 26 février 2005
Statut
Membre
Dernière intervention
12 août 2006

Voila ca fonctionne !
Merci à tous les deux :)
Messages postés
277
Date d'inscription
lundi 9 février 2004
Statut
Membre
Dernière intervention
4 mai 2008

Il me semblait que Bitmap image faisait une reservation mémoire et qu'ensuite le new utilisait cette mémoire.

duck88
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
52
Le Collecteur de Poubelle ????????   
lol

<hr size="2" />VC# forever
Messages postés
475
Date d'inscription
jeudi 19 juin 2003
Statut
Membre
Dernière intervention
3 novembre 2008

Il me semblait que

Bitmap image faisait une reservation mémoire et qu'ensuite le new utilisait cette mémoire.

Non, newinstancie l'objet et le place en mémoire. La variable image n'est qu'une référence vers cet objet en mémoire.
Le Collecteur de Poubelle ????????  
Traduction mot pour mot :) En fait, le terme français est ramme miette.
[:D] @++
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
52
non, c'est ramasse miette, et à vrai dire ça me fait autant rire  

<hr size="2" />VC# forever