Determinare quanta memoria utilizza una classe?
Domanda
Sto cercando di trovare un modo per determinare in fase di esecuzione la quantità di memoria utilizzata da una determinata classe in .NET.Utilizzando Marshal.SizeOf()
è fuori uso, poiché funziona solo su tipi di valore.C'è un modo per verificare esattamente quanta memoria utilizza una classe?
Soluzione
Ho iniziato solo di recente a esaminare questo tipo di cose, ma ho scoperto che i profiler di memoria possono fornire informazioni abbastanza dettagliate riguardo alle istanze di oggetti all'interno della tua applicazione.
Eccone un paio che vale la pena provare:
Altri suggerimenti
Sono d'accordo che un memory profiler è il modo più semplice per ottenere le informazioni che stai cercando.Oltre ai due menzionati in precedenza, consiglio JetBrains dotTrace, che è sia un profiler delle prestazioni che un profiler della memoria.
Se vuoi farlo da solo e sei disposto ad approfondire le viscere del CLR, puoi usare il API di profilazione .NET, che è un'API non gestita che (come afferma Microsoft):"Consente a un profiler di monitorare l'esecuzione di un programma da parte del common Language Runtime (CLR)." Non è esattamente destinato a un uso casuale, ma ha un'enorme quantità di funzionalità.
basta collegarsi alla domanda SO correlata: