前の質問の答えから、Hans Passant
私はそれを理解しました:
MyImage = new Bitmap(openFileDialog1.FileName);
pictureBox1.Image = (Image)MyImage;
はい、そのコードはファイルをロックします。ロックは、GDI +が作成するメモリマップトファイルオブジェクトによって生成され、ページングファイルにスペースを割り当てることなく、ファイルのピクセルデータをメモリに効率的にマップします。画像が画像ボックスに表示され、破棄されていない限り、ファイルを削除することはできません。ロックにより削除されません。
質問は、以前に使用した画像をから削除しようとしたときのエラー(時々)に関するものでしたPictureBox
。この正確な状況では、次のようにさえ呼んでいるようです。
if (MyImage != null)
{
MyImage.Dispose();
}
イメージを削除するときが来たときに(これはあらゆる種類の管理されていないリソースである可能性があると思います)、イメージが破棄されることを保証するものではありません。
したがって、2つの質問があります。1つは、でBitMap
の使用に関する現在の問題とPictureBox
、それによって引き起こされるリソースのロックに関連しています。これが内部の画像を表示する唯一PictureBox
の方法ではないことを確認したので、この問題を引き起こさず、必要なときにいつでも画像が解放されて削除されることを保証する別の方法があります。
そして2番目の質問-.NETで管理されていないリソースを操作する必要がありDelete
、それらのような操作を行う必要がある場合の基本的なアプローチは何ですか。この問題は、.NETで管理されていないリソースを操作するときに発生する可能性があります。特定の瞬間にリソースをロック/解放し、中継しないという問題を解決するための一般的なアプローチはありますかGarbage Collector
(明らかに失敗します)リリースには異なる時間がかかる場合があるため、時々)。GC...
明示的に呼び出すためにメソッドを使用するfinilizer
ものもありますが、大学は、予測できない問題を引き起こす可能性があるため、これらのメソッドを使用しない方がよいと述べています。
では、ガイドラインや提案はありますか?