Sto cercando di rintracciare una perdita di memoria in un programma C# più grande che genera più thread. Nel processo, ho creato un piccolo programma laterale che sto usando per testare alcune cose di base, e ho trovato un comportamento che non capisco davvero.Perdita di memoria thread
class Program
{
static void test()
{
}
static void Main(string[] args)
{
while (true)
{
Thread test_thread = new Thread(() => test());
test_thread.Start();
Thread.Sleep(20);
}
}
}
In esecuzione questo programma, vedo che l'utilizzo della memoria del programma aumenta costantemente senza fermarsi. In pochi minuti l'utilizzo della memoria supera i 100 MB e continua a salire. Se commento la riga test_thread.Start() ;, la memoria utilizzata dal programma raggiunge circa un paio di megabyte e si livella. Ho anche provato a forzare la garbage collection alla fine del ciclo while usando GC.Collect(), ma non sembrava fare nulla.
Ho pensato che il thread sarebbe stato deinterrogato non appena la funzione è stata completata, permettendo al GC di rimuoverlo, ma questo non sembra accadere. Non devo capire qualcosa di più profondo qui, e gradirei un po 'di aiuto nel correggere questa perdita. Grazie in anticipo!