Maneira correta de descartar Image / Bitmap e PictureBox

Estou tentando desenvolver um aplicativo Windows Mobile 6 (em WF / C #). Há apenas um formulário e no formulário há apenas um objeto PictureBox. Nele eu desenho todos os controles desejados ou o que eu quiser.

Há duas coisas que estou fazendo. Desenhando formas personalizadas e carregando bitmaps de arquivos .png.

A próxima linha bloqueia o arquivo ao carregar (que é um cenário indesejado):

Bitmap bmp = new Bitmap("file.png");

Então, eu estou usando outra maneira de carregar o bitmap.

public static Bitmap LoadBitmap(string path) {
    using (Bitmap original = new Bitmap(path))
    {
        return new Bitmap(original);
    }
}

Acho que é muito mais lento, mas não conheço melhor maneira de carregar uma imagem, liberando rapidamente o bloqueio de arquivo.

Agora, ao desenhar uma imagem, existe um método que eu 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; 
}

No entanto, isso parece ser algum tipo de vazamento de memória. E se eu continuar fazendo isso por muito tempo, o aplicativo eventualmente trava.

Portanto, eu tenho 3 perguntas:

1.) Qual é a melhor maneira de carregar bitmaps de arquivos sem bloquear o arquivo?

2.) Quais objetos precisam ser dispostos manualmente na função Draw () (e em que ordem), para que não haja vazamento de memória nem lançamento de ObjectDisposedException?

3.) Se pictureBox.Image estiver definido como bmp, como na última linha do código, pictureBox.Image.Dispose () descartaria apenas recursos relacionados à manutenção de pictureBox.Image ou o Bitmap subjacente definido para ele?

questionAnswers(2)

yourAnswerToTheQuestion