Bitmap.RotateFlip augmente en mémoire

Résolu
mecano14 Messages postés 35 Date d'inscription samedi 26 février 2005 Statut Membre Dernière intervention 12 août 2006 - 12 août 2006 à 15:24
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 - 12 août 2006 à 18:42
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

cs_badrbadr Messages postés 475 Date d'inscription jeudi 19 juin 2003 Statut Membre Dernière intervention 3 novembre 2008 1
12 août 2006 à 17:00
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]
@++
3
mecano14 Messages postés 35 Date d'inscription samedi 26 février 2005 Statut Membre Dernière intervention 12 août 2006
12 août 2006 à 17:09
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...
3
ducker88 Messages postés 277 Date d'inscription lundi 9 février 2004 Statut Membre Dernière intervention 4 mai 2008
12 août 2006 à 16:25
Slt,

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

duck88
0
mecano14 Messages postés 35 Date d'inscription samedi 26 février 2005 Statut Membre Dernière intervention 12 août 2006
12 août 2006 à 16:57
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ducker88 Messages postés 277 Date d'inscription lundi 9 février 2004 Statut Membre Dernière intervention 4 mai 2008
12 août 2006 à 17:01
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
0
cs_badrbadr Messages postés 475 Date d'inscription jeudi 19 juin 2003 Statut Membre Dernière intervention 3 novembre 2008 1
12 août 2006 à 17:03
Ça ne change absolument rien ducker88
Tu continues tjrs à créer un nouveau objet à chaque tour (l'opérateur new en témoigne).
0
mecano14 Messages postés 35 Date d'inscription samedi 26 février 2005 Statut Membre Dernière intervention 12 août 2006
12 août 2006 à 17:06
[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);
0
mecano14 Messages postés 35 Date d'inscription samedi 26 février 2005 Statut Membre Dernière intervention 12 août 2006
12 août 2006 à 17:11
Voila ca fonctionne !
Merci à tous les deux :)
0
ducker88 Messages postés 277 Date d'inscription lundi 9 février 2004 Statut Membre Dernière intervention 4 mai 2008
12 août 2006 à 17:13
Il me semblait que Bitmap image faisait une reservation mémoire et qu'ensuite le new utilisait cette mémoire.

duck88
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 60
12 août 2006 à 18:06
Le Collecteur de Poubelle ????????   
lol

<hr size="2" />VC# forever
0
cs_badrbadr Messages postés 475 Date d'inscription jeudi 19 juin 2003 Statut Membre Dernière intervention 3 novembre 2008 1
12 août 2006 à 18:14
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] @++
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 60
12 août 2006 à 18:42
non, c'est ramasse miette, et à vrai dire ça me fait autant rire  

<hr size="2" />VC# forever
0
Rejoignez-nous