DOBON.NET DOBON.NETプログラミング掲示板過去ログ

PictureBoxでの画像表示で質問です

環境/言語:[VB.NET]
分類:[.NET]

始めまして!
複数の画像ファイルをタイマーを使用してスライドショー的に表示したいと思っています。
下記コードで画像を縮小表示させているのですが、
長時間繰り返し表示しているとメモリ不足エラーとなってしまいます(>_<)
一体どこでメモリリークが起きているのかご教授お願い致します_(._.)_
ちなみに、この関数を呼び出す度に500k程メモリが費やされてしまいます…


'画像データを表示
Private Sub loadPic(ByVal strPicID As String)

Dim bmp As Bitmap

 Try

  'フォームに表示されている画像の初期化
  picData.Image = Nothing

  '画像ファイルの存在チェック
  If System.IO.File.Exists(PIC_PATH & "\" & strPicID & ".gif") Then

   '画像データの読込
   bmp = New Bitmap(PIC_PATH & "\" & strPicID & ".gif")

   'サイズ比率を保持して縮小する
   Dim scale As Single = Math.Min(1.0F, Math.Min(picData.Width / CSng(bmp.Width), picData.Height / CSng(bmp.Height)))

   '画像表示
   picData.Image = New Bitmap(bmp, CInt(bmp.Width * scale), CInt(bmp.Height * scale))

  End If

 Catch ex As Exception

  picData.Image = Nothing

 Finally

  If Not IsNothing(bmp) Then
   bmp.Dispose()
   bmp = Nothing
  End If

 End Try

End Sub
ファイルから読み込んだ Image(Bitmap) オブジェクトは Dispose しているようですが、picData に今まで入っていた Image オブジェクトは(見えないところに押しやるだけで)放置されてますね。
正常に処理が終わるとDisposeを通らないからかもしれません。

Try
  'フォームに表示されている画像の初期化
    if not picData is nothing then
      picData.Image.Dispose()
    end if

  picData.Image = Nothing

とかでどうでしょうか。(検証してないですが…
早速のご教授ありがとうございます!
お二方のご指摘通り、表示しているImageオブジェクトが放置されている状態でした^^;
以下のように変更致しましたところ
バッチリ動作しました(^^)
本当にお忙しい所、ありがとうございました。


Try
 If Not picData.Image Is Nothing Then
  picData.Image.Dispose()
    picData.Image = Nothing
 End If
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板