Sto lavorando a un programma che crea grafici interattivi. Tuttavia, il seguente problema si verifica anche se il livello di rendering del programma è disabilitato.C#, perché il GC viene eseguito più volte al secondo?
Su alcune schermate dell'applicazione, in base agli strumenti di diagnostica di Visual Studio 2015, il GC esegue il back to back circa 4 volte al secondo, riducendo le prestazioni della mia applicazione (da 120 fps fino a 15 fps).
Ho scattato alcune snapshot di memoria in attesa di vedere allocazioni impreviste, ma in base alle istantanee ci sono solo una o due allocazioni e raccolte di System.Internal.HandleCollector + HandleType ogni pochi secondi, che sembra essere normale, anche quando il problema non sta succedendo.
Alcune altre cose che ho notato:
- Questo accade su più macchine.
- Questo succede con o senza il debugger allegato.
- La maggior parte del tempo di CPU dell'applicazione è in clr.dll.
- Il motivo di ogni esecuzione del GC è elencato come "allocazione degli oggetti di piccole dimensioni ", anche quando non sono presenti allocazioni osservabili nelle istantanee.
A questo punto sono perplesso. Qualcuno ha visto accadere questo o sapere dove dovrei iniziare il debug?
Che cosa stai utilizzando per generare i grafici? GDI +? Aggiornate la grafica sul cambio di dati o costantemente? –
Utilizziamo DirectX, tramite SharpDX. I grafici vengono generati una volta, modificati in base all'input dell'utente e disegnati su ogni fotogramma. Ma il problema si verifica ancora anche se il livello di rendering è stato completamente rimosso. –
Non sono sicuro di come la domanda "Come si esegue il debug del GC in esecuzione a causa di allocazioni quando Visual Studio non mostra allocazioni?" non ha "una chiara affermazione del problema" ed è "non utile agli altri lettori". –