Hallo,
ich habe bei meiner GDI+ Routine das Problem, dass der Arbeitsspeicher extrem schnell volläuft, etwa 2-3 MB pro Frame den ich rendere. Bei ca. 600 - 800 Frames ist dann Schluss - OutOfMemory-Exception
Ich habe hier mal den Code gepostet... eigentlich dispose ich alles was ich aufmache, aber irgendwas muss hier noch versteckt sein.
Spoiler anzeigen
EDIT: Ich habe gerade auch nochmal im Taskmanager nachgeschaut, ich kriege pro Frame ein GDI-Objekt dazu -> sehr wahrscheinlich das Bild, das diese 2-3MB braucht und damit den Arbeitsspeicher vollspammt
ich habe bei meiner GDI+ Routine das Problem, dass der Arbeitsspeicher extrem schnell volläuft, etwa 2-3 MB pro Frame den ich rendere. Bei ca. 600 - 800 Frames ist dann Schluss - OutOfMemory-Exception
Ich habe hier mal den Code gepostet... eigentlich dispose ich alles was ich aufmache, aber irgendwas muss hier noch versteckt sein.
VB.NET-Quellcode
- Private Sub drawFrame()
- If Not IsNothing(picBoxGauge.BackgroundImage) Then
- picBoxGauge.BackgroundImage.Dispose()
- End If
- Dim pic As New Bitmap(350, 350)
- Dim g As Graphics = Graphics.FromImage(pic)
- Dim backgroundBrush As New SolidBrush(Color.Black)
- Dim speedFont As New Font("Arial", 20, FontStyle.Bold)
- Dim speedXpos As Integer
- Dim f1t_overlay As Image = My.Resources.f1t_overlay
- Dim f1t_bg As Image = My.Resources.f1t_bg
- Dim f1t_drs_active As Image = My.Resources.f1t_drs_active
- Select Case frames(frameCounter).speed.ToString.Length
- Case 1
- speedXpos = 133
- Case 2
- speedXpos = 124
- Case 3
- speedXpos = 115
- End Select
- With g
- 'Draw the background
- .DrawImage(f1t_bg, 0, 0, 350, 350)
- 'Draw throttle, brake, speed, gear, rpm and kers
- .FillRectangle(Brushes.Green, 92, 233, 105 * frames(frameCounter).throttle + 1, 9)
- .FillRectangle(Brushes.Red, 92, 245, 105 * frames(frameCounter).brake + 1, 9)
- .DrawString(frames(frameCounter).speed, speedFont, Brushes.White, speedXpos, 122)
- 'Draw drs and overlay
- .DrawImage(My.Resources.f1t_overlay, 0, 0, 350, 350)
- End With
- picBoxGauge.BackgroundImage = Image.FromHbitmap(pic.GetHbitmap)
- g.Dispose()
- pic.Dispose()
- backgroundBrush.Dispose()
- speedFont.Dispose()
- f1t_bg.Dispose()
- f1t_drs_active.Dispose()
- f1t_overlay.Dispose()
- End Sub
EDIT: Ich habe gerade auch nochmal im Taskmanager nachgeschaut, ich kriege pro Frame ein GDI-Objekt dazu -> sehr wahrscheinlich das Bild, das diese 2-3MB braucht und damit den Arbeitsspeicher vollspammt
Twitch Viewer Display Chat-, Zuschauer- und Statistiktool für Streamer
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „newcat“ ()