Manera correcta de desechar Image / Bitmap y PictureBox
Estoy tratando de desarrollar una aplicación de Windows Mobile 6 (en WF / C #). Solo hay un formulario y en el formulario solo hay un objeto PictureBox. En él dibujo todos los controles deseados o lo que quiera.
Hay dos cosas que estoy haciendo. Dibujar formas personalizadas y cargar mapas de bits de archivos .png.
La siguiente línea bloquea el archivo al cargar (que es un escenario no deseado):
Bitmap bmp = new Bitmap("file.png");
Así que estoy usando otra forma de cargar mapa de bits.
public static Bitmap LoadBitmap(string path) {
using (Bitmap original = new Bitmap(path))
{
return new Bitmap(original);
}
}
Supongo que esto es mucho más lento, pero no conozco una mejor manera de cargar una imagen, mientras que rápidamente libero el bloqueo de archivo.
Ahora, al dibujar una imagen, hay un método que uso:
public void Draw() {
Bitmap bmp = new Bitmap(240,320);
Graphics g = Graphics.FromImage(bmp);
// draw something with Graphics here.
g.Clear(Color.Black);
g.DrawImage(Images.CloseIcon, 16, 48);
g.DrawImage(Images.RefreshIcon, 46, 48);
g.FillRectangle(new SolidBrush(Color.Black), 0, 100, 240, 103);
pictureBox.Image = bmp;
}
Sin embargo, esto parece ser una especie de pérdida de memoria. Y si sigo haciéndolo durante demasiado tiempo, la aplicación finalmente falla.
Por lo tanto, tengo 3 preguntas:
1.) ¿Cuál es la mejor manera de cargar mapas de bits desde archivos sin bloquear el archivo?
2.) ¿Qué objetos deben eliminarse manualmente en la función Draw () (y en qué orden) para que no haya pérdida de memoria y no se arroje ObjectDisposedException?
3.) Si pictureBox.Image se establece en bmp, como en la última línea del código, ¿pictureBox.Image.Dispose () dispondría solo de recursos relacionados con el mantenimiento de pictureBox.Image o el mapa de bits subyacente establecido?