vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
TOP-Angebot: 17 bzw. 24 Entwickler-Vollversionen zum unschlagbaren Preis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
Prog gibt Speicher nicht mehr frei 
Autor: SuperEbse
Datum: 29.09.09 12:51

Hallo zusammen,
ich habe eine kleine App geschrieben, welche dynamische Controls timer gesteuert auf eine Form bzw. in Groupboxen added (z.B. Pictureboxes).
Ebenso werden diese Controls wieder removed und wieder neu erzeugt. Irgendwann bleibt alles stehen. Ich habe schon versucht mit dem Garbage Collector die Ressourcen wieder frei zu geben.

Hier ein Paar Snippets:

Public Sub add_new_control_with_data_members(ByVal Title As String, ByVal Name _
  As String, ByVal TableData As String, ByVal ErsteHilfe As Boolean, ByVal Type _
  As String)
        Try
 
            'neue Controls definieren
            Dim new_grp As New GroupBox
            Dim new_table As New DataGridView
            Dim new_Name_Label As New Label
            Dim new_picture As New PictureBox
            Dim new_pic_red_cross As New PictureBox
 
            new_grp.Width = 300
            new_grp.Height = frm_main.flow_panel_member.Height - 25
            new_grp.ForeColor = Color.Blue
 
            new_grp.Text = Title
            new_grp.Name = Trim("grp_" & Name)
            new_grp.Font = New Font("Arial", 14, FontStyle.Bold)
            new_grp.ForeColor = Color.Blue
 
 
            Select Case Type
                Case "ADMIN"
                    frm_main.flow_panel_admin.Controls.Add(new_grp)
                    frm_main.flow_panel_admin.Refresh()
                Case "MEMBER"
                    frm_main.flow_panel_member.Controls.Add(new_grp)
                    frm_main.flow_panel_member.Refresh()
            End Select
 
            new_grp.Refresh()
 
            new_Name_Label.Text = Replace(Name, " ", vbCrLf)
            new_Name_Label.Left = 5
            new_Name_Label.Top = 40
            new_Name_Label.AutoSize = True
            new_Name_Label.Font = New Font("Arial", 14, FontStyle.Bold)
            new_Name_Label.ForeColor = Color.Black
 
            new_grp.Controls.Add(new_Name_Label)
 
            new_pic_red_cross.Width = 30
            new_pic_red_cross.Height = 30
 
            new_pic_red_cross.Top = new_Name_Label.Bottom - _
              new_Name_Label.Height
            new_pic_red_cross.Left = new_grp.Width / 2
            new_pic_red_cross.Name = "red_" & Trim(Name)
            new_pic_red_cross.SizeMode = PictureBoxSizeMode.Zoom
 
            If ErsteHilfe = True Then
                new_pic_red_cross.Load(RedCrossImage)
            End If
 
            new_grp.Controls.Add(new_pic_red_cross)
 
 
            new_picture.Name = Trim(Now.Ticks)
 
            Dim tmp_name As String = Replace(Name, ",", "")
            If File.Exists(UserPicturePath & "\" & Replace(tmp_name, " ", "_") _
              & ".jpg") = True Then
                new_picture.Load(UserPicturePath & "\" & Replace(tmp_name, " ", _
                "_") & ".jpg")
            Else
                new_picture.Load(DefaultImage)
            End If
 
            new_picture.Width = new_grp.Width * 0.33
            new_picture.Height = ((new_picture.Width / 4) * 3)
            new_picture.BorderStyle = BorderStyle.FixedSingle
            new_picture.SizeMode = PictureBoxSizeMode.Zoom
 
            new_picture.Left = new_grp.Width - new_picture.Width - 5
            new_picture.Top = 20
 
            new_grp.Controls.Add(new_picture)
 
            new_table.Name = "tbl_" & Name
 
            new_table.Left = new_Name_Label.Left
            new_table.Top = new_picture.Bottom + 10
            new_table.Width = new_grp.Width - 10
            new_table.Height = new_grp.Height - new_table.Top - 10
 
            new_table.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
            new_table.AlternatingRowsDefaultCellStyle.BackColor = _
              Color.LightGreen
            new_table.AllowUserToDeleteRows = True
            new_table.AllowUserToResizeRows = False
            new_table.AllowUserToResizeColumns = False
            new_table.AllowUserToAddRows = False
            new_table.RowHeadersVisible = False
            new_table.ColumnHeadersBorderStyle = _
              DataGridViewHeaderBorderStyle.Single
            new_table.BackgroundColor = Color.White
            new_table.BorderStyle = BorderStyle.FixedSingle
            new_table.ReadOnly = True
            new_table.Font = New Font("Arial", 10, FontStyle.Regular)
 
 
            new_table.DataSource = SQL_dataset.Tables(TableData)
 
 
            new_grp.Controls.Add(new_table)
 
            new_table.Columns(SQL_dataset.Tables(TableData).Columns( _
              "Produkt").ColumnName).MinimumWidth = 170
 
            new_table.ClearSelection()
 
 
            frm_main.flow_panel_member.Refresh()
     ...
    End Sub
Hier vom Löschen der Controls:

 frm_main.flow_panel_admin.Controls.Clear()
Vor jedem Timer Tick lasse ich den Garbage Collector sammeln...

aber freigegeben wird der Speicher nicht.

Kann mir jemand von Euch weiterhelfen?

Greetz SuperEbse
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Prog gibt Speicher nicht mehr frei1.496SuperEbse29.09.09 12:51
Re: Prog gibt Speicher nicht mehr frei793ModeratorRalf Ehlert29.09.09 14:35
Re: Prog gibt Speicher nicht mehr frei758SuperEbse29.09.09 14:58
Re: Prog gibt Speicher nicht mehr frei810SuperEbse29.09.09 15:59
Re: Prog gibt Speicher nicht mehr frei790ModeratorRalf Ehlert29.09.09 22:51
Re: Prog gibt Speicher nicht mehr frei785SuperEbse30.09.09 08:54
Re: Prog gibt Speicher nicht mehr frei866ModeratorFZelle30.09.09 10:20

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel