perdite di handle con classe .NET System.Threading.Thread
-
04-10-2019 - |
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.
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.