objeto new imagen create c# memory bitmap memory-leaks

new - objeto imagen c#



La creación continua de bitmaps conduce a la pérdida de memoria (2)

También estás "filtrando" el objeto Graphics. Prueba esto:

while (true) { if (listBoxIndex != -1) { Rectangle rect = windowRects[listBoxIndex]; Bitmap bitmap = new Bitmap(rect.Width, rect.Height); using (Graphics g = Graphics.FromImage(bitmap)) { IntPtr hdc = g.GetHdc(); try { PrintWindow(windows[listBoxIndex], hdc, 0); } finally { g.ReleaseHdc(hdc); } } if (pictureBox1.Image != null) { pictureBox1.Image.Dispose(); } pictureBox1.Image = bitmap; } }

Tengo un hilo que continuamente genera bitmaps y toma una captura de pantalla de la ventana de otro programa. Ahora, tengo un pictureBox en mi formulario, y eso se actualiza constantemente con los mapas de bits generados. Aquí está el código que tengo en el hilo:

Bitmap bitmap = null; while (true) { if (listBoxIndex != -1) { Rectangle rect = windowRects[listBoxIndex]; bitmap = new Bitmap(rect.Width, rect.Height); Graphics g = Graphics.FromImage(bitmap); IntPtr hdc = g.GetHdc(); PrintWindow(windows[listBoxIndex], hdc, 0); pictureBox1.Image = bitmap; g.ReleaseHdc(hdc); } }

Como puede ver, esto ocasiona una pérdida de memoria debido a la llamada continua al nuevo mapa de bits (rect.Width, rect.Height). He intentado agregar "bitmap.Dispose ()" a la parte inferior del ciclo while, pero eso lleva a que también se elimine la imagen de pictureBox, lo que hace una X roja gigante en lugar de la imagen real. ¿Hay alguna forma de que pueda deshacerme del "mapa de bits" sin deshacerme de la imagen PictureBox?


El ejemplo respondido tiene una fuga con Graphics g después de g.ReleaseHdc(..);

Recuerde bajar la variable de gráficos

como por ejemplo:

g.Dispose();