Frage

Ich habe ein Problem, dass Anzahl der Griffe in meiner app kontinuierlich wächst. Ich habe das Debuggen und zu erkennen, dass dies durch System.Threading.Thread Klasse verursacht wird, die für einige Routine verwendet wird. Zur Vereinfachung der Fehlersuche Ich habe eine Probe .NET-Anwendung erstellt:

    ...

    private void button1_Click(object sender, EventArgs e)
    {
        Thread t = new Thread(DoWork);
        t.Start();
    }

    public void DoWork(object parameter)
    {
        // Do something...
    }

    ...

Jedes Mal, wenn ich auf die Schaltfläche bin klicken, wird ein Thread erstellt System.Threading.Thread Klasse. Das Problem ist, dass sieht aus wie der Faden nicht frees Griffe, weil jeder Klick Ursache Anzahl der Griffe von ~ 5 wächst.

Die Frage ist: Wie kann ich manuell alle Griffe von System.Threading.Thread Klasse erstellt frei

Vielen Dank im Voraus.

War es hilfreich?

Lösung

Es ist nicht eigentlich die Griffe undicht, es ist nur, dass der GC hat sie noch nicht gesammelt. Versuchen Sie den Code in der Schaltfläche Handler ändern, dass er Schleifen und schafft 500 Fäden oder etwas und versuchen Sie es ein paar Mal drücken und Sie werden wahrscheinlich sehen Griffe gesammelt werden.

Andere Tipps

Sie müssen nicht manuell Ihre Thread-Handles befreien, einfach alle Verweise auf Ihre Thread Instanz fallen sollte ausreichen. Da der Faden nicht mehr läuft und alle Verweise darauf werden entfernt, der gargabe Kollektor wird die Griffe auf der nächsten Sammlung befreien.

In Ihrem Fall, es sieht nicht wie der Thread wird immer beenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top