Bonjour,
J'ai un problème dans un de mes projets, un problème de fuite de mémoire dont je ne trouve pas l'origine. J'aurais donc besoin de votre aide pour me débloquer.
Pour le contexte :
Eléments utilisés :
- panel (name : pnlMap, backgroundImage : image)
- pictureBox (name : ptbZoom, sizeMode : StrectchImage, Size : 200;200)
- bitmap (name: bitmapZoom)
Objectif du code :
Lorsque la souris se déplace sur le panel, dans la pictureBox on voit une partie de l'image en backgroundImage dans la pictureBox mais en plus grande
Problème:
J'ai utilisé l'évènement mousemove sur le panel et j'ai réalisé le code. Le problème est que j'ai une fuite de mémoire. En effet, la mémoire du processus augmente à chaque mouvement et ne descend pas même en attendant. J'ai essayé de comprendre de quel élément provenait la fuite mais je n'es pas trouvé (et je suis sûr que c'est tout bête).
Information complémentaire:
- la picturebox et la bitmap ne sont pas utilisé autre part dans le programme
- le panel est utilisé uniquement pour changer le fond avec il y a aucune fuite de mémoire (le code a été crée sans la fonctionnalité zoom et il y avait aucun problème)
Le code (se sera mieux):
J'espère que j'ai été assez clair et que je vous ai donné tous les éléments nécessaire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 private void panelMap_MouseMove(object sender, MouseEventArgs e) { //libération de la mémoire pbxZoom.Image.Dispose(); bitmapZoom.Dispose(); //création de la bitmap bitmapZoom = new Bitmap(50, 50); //création de la section voulue Rectangle section = new Rectangle(e.X-25, e.Y-25, 50, 50); //récupération section de l'image using (Graphics gr = Graphics.FromImage(bitmapZoom)) { gr.DrawImage(pnlMap.BackgroundImage, 0, 0, section, GraphicsUnit.Pixel); } //affichage du zoom,le zoom se fait avec le fait que la bitmap soit de 50;50 et la picturebox en 200;200 mode strectch pbxZoom.Image = bitmapZoom; }
Je vous remercie d'avance de votre aide.
Partager