VB macht mir den Arbeitsspeicher voll :-(

  • Ersteller Ersteller NIGHT2000
  • Erstellt am Erstellt am
N

NIGHT2000

Also ich will es mal so sagen, ich habe ein kleines Problem mit dem Arbeitsspeicher eines Programmes. Ich rufe sozusagen über die Label Funktion, ein Bild auf ein Label und wenn der Nutzer jetzt wieder eine Auswahl trifft, dann zeichne ich des wieder neu.

Damit ihr mich genau versteht hab ich hier mal extra was geprog. aber da scheint es zu gehen. Nur brauche ich des in meinen großen Prg. ^^ da geht es aber nett

Da wird aus dem 16 MB die es nutzt, 300 irgendwann und bleibt natürlich dann stehen ...

Hier mal der Code :
Extra den Kompl. Code genommen schrieb:
Code:
Public Class Form1
    Inherits System.Windows.Forms.Form

#Region " Vom Windows Form Designer generierter Code "

    Public Sub New()
        MyBase.New()

        ' Dieser Aufruf ist für den Windows Form-Designer erforderlich.
        InitializeComponent()

        ' Initialisierungen nach dem Aufruf InitializeComponent() hinzufügen

    End Sub

    ' Die Form überschreibt den Löschvorgang der Basisklasse, um Komponenten zu bereinigen.
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
        If disposing Then
            If Not (components Is Nothing) Then
                components.Dispose()
            End If
        End If
        MyBase.Dispose(disposing)
    End Sub

    ' Für Windows Form-Designer erforderlich
    Private components As System.ComponentModel.IContainer

    'HINWEIS: Die folgende Prozedur ist für den Windows Form-Designer erforderlich
    'Sie kann mit dem Windows Form-Designer modifiziert werden.
    'Verwenden Sie nicht den Code-Editor zur Bearbeitung.
    Friend WithEvents Button1 As System.Windows.Forms.Button
    Friend WithEvents Button2 As System.Windows.Forms.Button
    Friend WithEvents Button3 As System.Windows.Forms.Button
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
        Me.Button1 = New System.Windows.Forms.Button
        Me.Button2 = New System.Windows.Forms.Button
        Me.Button3 = New System.Windows.Forms.Button
        Me.SuspendLayout()
        '
        'Button1
        '
        Me.Button1.Location = New System.Drawing.Point(0, 8)
        Me.Button1.Name = "Button1"
        Me.Button1.Size = New System.Drawing.Size(96, 24)
        Me.Button1.TabIndex = 0
        Me.Button1.Text = "laden"
        '
        'Button2
        '
        Me.Button2.Location = New System.Drawing.Point(96, 8)
        Me.Button2.Name = "Button2"
        Me.Button2.Size = New System.Drawing.Size(104, 23)
        Me.Button2.TabIndex = 1
        Me.Button2.Text = "löschen"
        '
        'Button3
        '
        Me.Button3.Location = New System.Drawing.Point(843, 21)
        Me.Button3.Name = "Button3"
        Me.Button3.Size = New System.Drawing.Size(96, 24)
        Me.Button3.TabIndex = 2
        Me.Button3.Text = "Button3"
        '
        'Form1
        '
        Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
        Me.ClientSize = New System.Drawing.Size(1044, 285)
        Me.Controls.Add(Me.Button3)
        Me.Controls.Add(Me.Button2)
        Me.Controls.Add(Me.Button1)
        Me.Name = "Form1"
        Me.Text = "Form1"
        Me.WindowState = System.Windows.Forms.FormWindowState.Maximized
        Me.ResumeLayout(False)

    End Sub

#End Region

    Dim lbl() As Label

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim fo As New OpenFileDialog
        fo.ShowDialog()
        If fo.FileName <> "" Then

            For i As Integer = 0 To 100 '100 den vorgang machen
                Try

                    ReDim lbl(100)
                    For j As Int16 = 0 To 100
                        lbl(j) = New Label

                        With lbl(j)
                            .Parent = Me
                            '.Parent.Controls.Add(lbl(0))
                            .Location = New Point(50 + j, 50)
                            .Size = New Size(New Point(500, 500 - j))
                            .BackgroundImage = Image.FromFile(fo.FileName)
                            .Enabled = True
                            .Visible = True
                        End With
                    Next

                Catch ex As Exception
                    MsgBox(ex.ToString)
                End Try

                Refresh()

                Button3.Text = "Durchgang: " & i

                'System.Threading.Thread.Sleep(1000)
                Button2_Click(sender, e)
            Next


        End If

    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        'GC.SuppressFinalize()
        For i As Integer = 0 To UBound(lbl)
            lbl(i).BackgroundImage.Dispose()
            lbl(i).Dispose()
        Next
        'For i As Integer = 0 To Me.Controls.Count() - 1
        '    If Me.Controls.Item(i).GetType.ToString = "System.Windows.Forms.Label" Then
        '        Me.Controls.Item(i).BackgroundImage.Dispose()
        '        Me.Controls.Item(i).Dispose()
        '        'Me.Controls.Item(i).Finalize()
        '        'GC.SuppressFinalize(Me.Controls.Item(i))

        '    End If
        'Next

    End Sub

End Class

Jeder Tip könnt hilfreich sein und reicht mir schon

PS: Darf natürlich auch frei weiterverwendet werden...
 
In der Regel gibt es dafür nur eine einzige Ursache (Unaghängig von der Sprache). Sobald ein Objekt erzeugt wird, wird soviel Speicher reserviert wie maximal benötigt wird. Kommen dann noch Schleifen hinzu (am besten eignen sich natürlich verschachtelte Schleifen *grins*) dann ist ruckzuck der ganze Speicher voll bzw. reserviert. Geh also noch mal deine Schleifen durch und achte darauf, wo was und vor allem wie oft erzeugt wird.
 
JA , des hab ich alles schon angeschaut ^^ es hilft mir aber nicht wirklich. Ich denke mal, für den Code oben, gibt es ne einfachere Lösung ...

Vielleicht aber auch nicht :-(
 

Beliebte Schlagwörter

Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden.
Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.

Zurück
Oben Unten