2009-05-09 8 views
17

Ho avuto qualche problema nel capire esattamente come ottengo l'utilizzo di ram di un processo. (Quanto RAM attualmente consuma, non quanto è prenotato, o il suo massimo o minimo)Utilizzo di ram di un processo

Diciamo che ho un processo in esecuzione in fondo, Java.exe, è permesso usare 1024mb di ram, come posso dire quanto ram è attualmente in uso.

Sto iniziando il processo da solo, quindi ho accesso all'oggetto Processo, vorrei solo un piccolo chiarimento su quale proprietà è quella per me.

+0

Eventuali duplicati di [Come arrivare memoria disponibile o utilizzato in C#] (https://stackoverflow.com/questions/750574/how-to- get-memory-available-or-used-in-c-sharp) – Saul

risposta

16

Se si è interessati alla memoria fisica, probabilmente si desidera WorkingSet64, che fornisce "la quantità di memoria fisica allocata per il processo associato". Comprendi che questo valore oscilla costantemente e il valore che questa chiamata ti dà potrebbe non essere aggiornato. Potresti anche essere interessato a PeakWorkingSet64, che fornisce "la quantità massima di memoria fisica utilizzata dal processo associato".

+4

Attenzione per [pagine bloccate] (http://forum.sysinternals.com/topic23886_post122660.html), che non fanno parte del set di lavoro (abbastanza stranamente), e [il task manager standard non li vede neanche] (http://blogs.msdn.com/b/psssql/archive/2009/09/11/fun-with-locked-pages-awe- task-manager-and-the-working-set.aspx) (anche se sono sicuramente consumati: D) –

+0

Voglio usare PeakWorkingSet64 per ottenere la memoria massima utilizzata dal processo, ma Non so quando ottenere questa proprietà per fornire il valore più preciso. Penso che il momento migliore per ottenere la proprietà sia quando il processo è "OnExitting", ma la classe Process non ha questo evento. E 'stato appena terminato l'evento – Andiana

26

ho trovato questo su MSDN e si sta lavorando

System.Diagnostics.Process proc = assign your process here :-) 

int memsize = 0; // memsize in Megabyte 
PerformanceCounter PC = new PerformanceCounter(); 
PC.CategoryName = "Process"; 
PC.CounterName = "Working Set - Private"; 
PC.InstanceName = proc.ProcessName; 
memsize = Convert.ToInt32(PC.NextValue())/(int)(1024); 
PC.Close(); 
PC.Dispose(); 
+1

questa è la vera risposta –

+1

Non penso che tu abbia bisogno di lanciare l'intero, vero? – Codingale

+0

@Laz testato e il valore restituito è il più accurato rispetto a Task Manager. ma per alcuni processi multithread come google chrome, non è in grado di ottenere risultati accurati, qualche idea? – Dennis

Problemi correlati