Rescourcen eines Grid freigeben



  • Hi,

    da ich mit C++ Wissen in C# eingestiegen bin, kämpfe ich noch mit dem Rescourcen-Freigeben. (So ein ungutes Gefühl ist immer da, wenn ich keine "delete" sehe 😉 )

    Ich habe mit diesem Designer in Visual Studio ein Fenster mit einem "Grid" erstellt (WPF). Nun setze ich in die Grid-Felder einige Labels um später Text anzuzeigen (Ich hoffe dies ist die richtige Vorgehensweise):

    Label[,] BestTableOutput;
    
    private void PrepareGrid()
            {
                BestTableOutput = new Label[3, 11];
    
                for (int i = 0; i < 3; i++)
                {
                    for (int j = 0; j < 11; j++)
                    {
                        BestTableOutput[i, j] = new Label();
                        Grid.SetColumn(BestTableOutput[i, j], i);
                        Grid.SetRow(BestTableOutput[i, j], j);
    
                        grid1.Children.Add(BestTableOutput[i, j]);
                    }
    
                }
    
            }
    

    Und so versuche ich die Rescourcen vor dem Schließen des Fensters wieder freizugeben:

    private void Removegrid()
            {
               grid1.Children.Clear();
               BestTableOutput = null;
            }
    

    Ist dies die richtige Vorgehensweise, damit der Garbage-Collector den Speicher wieder freigeben kann? Oder muss ich die Labels einzeln aus dem Grid entfernen?
    Oder soll man ganz anders vorgehen?



  • In C# musst du keinerlei Managed Resourcen freigeben und das was du da hast sind Managed Resourcen. Kein Clear und kein null setzen notwendig.
    Und der GC raeumt die Objekte nicht ab nur weil sie genullt sind.


  • Administrator

    Andreas XXL schrieb:

    Ich habe mit diesem Designer in Visual Studio ein Fenster mit einem "Grid" erstellt (WPF). Nun setze ich in die Grid-Felder einige Labels um später Text anzuzeigen (Ich hoffe dies ist die richtige Vorgehensweise):

    Eher nicht. Schau dir lieber zuerst C# gut an und beschäftige dich mit WPF erst, wenn du C# kannst. WPF ist ein ganzes Thema für sich und gibt daher auch ganze Bücher nur über WPF (Einstiegslektüre für erfahrene C# Programmierer).

    Andreas XXL schrieb:

    Ist dies die richtige Vorgehensweise, damit der Garbage-Collector den Speicher wieder freigeben kann? Oder muss ich die Labels einzeln aus dem Grid entfernen?
    Oder soll man ganz anders vorgehen?

    Sobald etwas nicht mehr durch irgendwelche Pfade aus dem Hauptprogramm referenziert wird, gibt es der GC automatisch irgendwann frei. Es ist sinnvoll, wenn man Bereiche zum Aufräumen freigibt, welche man nicht mehr benötigt. Es ist aber schwer die Sache hier zu beurteilen, da man keinerlei Kontextinformationen hat.

    Aber von mir aus gesehen verwendest du WPF hier sowieso komplett verkehrt. Wie ich oben sagte, lass zuerst mal lieber die Finger von WPF.

    Grüssli


Log in to reply