Dovresti eseguire il GC manualmente quando ti trovi in una situazione in cui sai di aver generato un sacco di spazzatura, ma il garbage collector non lo fa.
Il garbage collector non è poi così intelligente. Non sa nulla su come funziona il tuo programma; tutto quello che sa è che quando c'è la pressione della memoria deve essere raccolta per alleggerirla. Per soddisfare questo vincolo, un garbage collector generazionale deve utilizzare l'algoritmo più stupido possibile: lascia che il maggior numero di garbage build up possibile prima di raccogliere.
Puoi fare di meglio, perché sai come funziona il tuo programma. Non vuoi che le pause GC quando il programma dovrebbe essere reattivo, e non vuoi grossi guadagni di memoria dove si aggrappano a roba che non ha più bisogno. Quindi una buona regola è quella di invocare manualmente il GC in punti in cui è probabile che il sistema generi un sacco di spazzatura e l'utente non si aspetta comunque che sia reattivo, come ad esempio alla fine di un ciclo di caricamento dei dati. (ad esempio, l'utente dice Open...
nel menu.) Il garbage collector non sa che è un buon momento per farlo funzionare, ma lo fai.