2011-11-22 5 views
1

메모리 사용량이 올라가거나 올라가는 데 문제가 있고 메모리가 남아 있지 않을 때까지 확장됩니다. 이미지를 빌드하기 위해 GHeat.Net 플러그인을 사용하고 있습니다. 어떤 이유로Visual Basic 메모리 사용이 계속 확장됩니다.

Dim pm As New gheat.PointManager() 
Dim g As Graphics 

Dim startZoom As Integer = 2 
Dim maxZoom As Integer = 17 

gheat.Settings.BaseDirectory = "C:\\gheatWeb\\__\\etc\\" 

pm.LoadPointsFromFile("C:\\points.txt") 

For zoom As Integer = startZoom To maxZoom 
    Dim startX As Integer = 0 
    Dim startY As Integer = 0 
    Dim maxX As Integer = 2^zoom 
    Dim maxY As Integer = 2^zoom 

    For x As Integer = startX To maxX 
     For y As Integer = startY To maxY 
      Dim filename As String = "C:\\images\\" + zoom.ToString + "\\x" + x.ToString + "y" + y.ToString + "zoom" + zoom.ToString + ".gif" 
      gheat.GHeat.GetTile(pm, "classic", zoom, x, y).Save(filename, System.Drawing.Imaging.ImageFormat.Gif) 
     Next 
    Next 
Next 

나는 for 루프를 칠 때 천장을 돌 때까지, 사용 된 메모리의 양이 그냥 위로 위로 상승 : 여기에 전체 코드입니다. 그렇더라도 프로그램은 계속 실행되지만 메모리 양은 증가하지 않습니다. 이 프로그램은 20Mb에서 정상적으로 생성되므로 왜 계속 올라갈 지 알 수 없습니다.

또한 가장 안쪽 루프의 끝에 GC.Collect을 시도했지만 아무런 소용이 없습니다. 어떤 아이디어?

답변

4

GHeat.GetTiledisposed이어야합니다. Bitmap이 반환됩니다.
또한 VB에서 그런 경로를 벗어날 필요가 없습니다.

For x As Integer = startX To maxX 
    For y As Integer = startY To maxY 
    Dim filename As String = String.Format("C:\images\{0}\x{1}y{2}zoom{3}.gif", zoom, x, y, zoom) 
    Using img = gheat.GHeat.GetTile(pm, "classic", zoom, x, y) 
     img.Save(filename, System.Drawing.Imaging.ImageFormat.Gif) 
    End Using 
    Next 
Next 
+0

이렇게하면 사진마다 메모리가 계속 증가하지 않고 삭제되지 않을 수 있습니다. 굉장해. 불행히도, 나는 여전히 엄청난 양의 메모리를 사용하고 있습니다. 줌이 약 8 또는 9에 도달하면 내 메모리 사용량이 램에 거의 도달하고 다음 확대/축소 수준에서 다시 두 배가됩니다. 나는 메모리 프로파일 링을 시도했지만, 그 패턴으로 올라가는 유일한 것은 GC# 1이다. 아하. 어떤 아이디어? –