Sebbene comprenda le gravi implicazioni del giocare con questa funzione (o almeno è quello che penso), non riesco a vedere perché sta diventando una di queste cose che programmatori rispettabili non userebbero mai, anche quelli che non lo sanno nemmeno a cosa serve.
Diciamo che sto sviluppando un'applicazione in cui l'utilizzo della memoria varia estremamente a seconda di ciò che sta facendo l'utente. Il ciclo di vita dell'applicazione può essere suddiviso in due fasi principali: modifica ed elaborazione in tempo reale. Durante la fase di editing, supponiamo che vengano creati miliardi o addirittura trilioni di oggetti; alcuni di loro piccoli e altri no, alcuni potrebbero avere finalizzatori e altri no, e supponiamo che la loro durata varia da pochi millisecondi a lunghe ore. Successivamente, l'utente decide di passare alla fase in tempo reale. A questo punto, supponiamo che le prestazioni giochino un ruolo fondamentale e che la minima alterazione nel flusso del programma possa portare conseguenze catastrofiche. La creazione di oggetti viene quindi ridotta al minimo possibile utilizzando pool di oggetti e simili, ma poi il GC si attiva in modo imprevisto e getta via tutto e qualcuno muore.
La domanda: in questo caso, non sarebbe saggio chiamare GC.Collect () prima di entrare nella seconda fase?
Dopotutto, queste due fasi non si sovrappongono mai nel tempo l'una con l'altra e tutte le ottimizzazioni e le statistiche che il GC avrebbe potuto raccogliere sarebbero state di scarsa utilità qui ...
Nota: come alcuni di voi hanno sottolineato, .NET potrebbe non essere la piattaforma migliore per un'applicazione come questa, ma questo va oltre lo scopo di questa domanda. Lo scopo è chiarire se una chiamata GC.Collect () può migliorare o meno il comportamento / le prestazioni complessive di un'applicazione. Siamo tutti d'accordo sul fatto che le circostanze in cui faresti una cosa del genere sono estremamente rare ma, di nuovo, il GC cerca di indovinare e lo fa perfettamente per la maggior parte del tempo, ma si tratta ancora di indovinare.
Grazie.