Domanda

Ho un problema che certo numero di maniglie nella mia app è in continua crescita. Ho fatto il debug e riconosco che questo è causato da classe System.Threading.Thread che viene utilizzato per un po 'di routine. Per semplificare il debug ho creato un'applicazione .NET di esempio:

    ...

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

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

    ...

Ogni volta che sto facendo clic sul pulsante, un thread è creata usando classe System.Threading.Thread. Il problema è che sembra che il filo non si FreeS Maniglie perché ogni clic il numero causa di maniglie in crescita del ~ 5.

La domanda è: come posso liberare manualmente tutte le maniglie create per classe System.Threading.Thread

Grazie in anticipo.

È stato utile?

Soluzione

E 'in realtà non perde le maniglie, è solo che il GC non li ha ancora incassato. Provare a cambiare il codice nel gestore pulsante in modo che esso loop e crea 500 thread o qualcosa e tenta premendo un paio di volte e probabilmente vedrete maniglie vengono raccolti.

Altri suggerimenti

Non è necessario per liberare manualmente le maniglie di thread, è sufficiente far cadere tutti i riferimenti all'istanza Thread dovrebbe essere sufficiente. Dato che il filo non è più in esecuzione e tutti i riferimenti ad esso vengono rimossi, il collettore gargabe libererà le maniglie della prossima collezione.

Nel tuo caso, non sembra come il filo potrà mai finire.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top