2010-08-20 17 views

risposta

7

Non v'è alcun modo definitivo, perché non è semplice per un qualsiasi tipo di oggetto.

Cosa succede se quell'oggetto contiene riferimenti ad altri oggetti? Cosa succede se quegli altri oggetti hanno altri oggetti che fanno riferimento a loro? Quale oggetto possiede effettivamente quello spazio di memoria? È quello che l'ha creato o l'ultimo a toccarlo? Ad un certo punto potrebbe avere proprietari diversi. O ti interessa solo quanto spazio prende il riferimento?

C'è anche un sacco di domande che hanno chiesto anche questo ... una rapida ricerca salta fuori:

How to get object size in memory?

C#: Memory usage of an object

Find out the size of a .net object

How much memory does a C#/.NET object use?

e la lista continua su un ...

+0

giustamente, grazie per i puntatori –

3

Non esiste un modo semplice e lo sizeof è valido solo per i tipi di valore. Un oggetto tipico contiene riferimenti ad elenchi e altri oggetti, quindi è necessario attraversare tutti i puntatori per ottenere il conteggio dei byte effettivi e aggiungere anche le dimensioni dei puntatori.

È possibile controllare l'API .Net Profiling o utilizzare un profiler di memoria come dotTrace. Un profiler di memoria ti aiuterà almeno a vedere dove è allocata la memoria e se l'allocazione della memoria è un problema nella tua applicazione. Questo è spesso più utile della dimensione effettiva dell'oggetto.

1

Mi chiedo come funziona System.Runtime.InteropServices.Marshal.SizeOf()? Ci sono molte interessanti funzioni statiche sotto l'oggetto Marshal che potrebbero essere utili qui.

+3

Anche quella torta è una bugia. –

+0

Intrigante ... ci proverò! –

3

Se è possibile - Serializzarlo!

Dim myObjectSize As Long 

Dim ms As New IO.MemoryStream 
Dim bf As New Runtime.Serialization.Formatters.Binary.BinaryFormatter() 
bf.Serialize(ms, myObject) 
myObjectSize = ms.Position 
Problemi correlati