2014-12-31 27 views
8

sto cercando di ottenere l'utilizzo della memoria della mia applicazione, ma per qualche motivo sto ottenendo dimensioni diverse rispetto a task managerCome ottenere l'utilizzo della memoria dell'applicazione come mostrato in Task Manager?

sto usando:

enter image description here

Task manager dimostra che la mia applicazione occupa 45mb, mentre quando lo inserisco nel mio codice ottengo 85mb come posso ottenere le stesse dimensioni del task manager (senza usare wmi)

+1

Aggiungi 'process.Refresh()' prima di chiamare 'process.PrivateMemorySize64' –

+0

non ha aiutato, ottenendo gli stessi valori come prima versione – atikot

+0

di Windows? – kennyzx

risposta

6

Probabilmente stai guardando la colonna sbagliata in "Task manager" o usando la proprietà sbagliata in Pr ocess class ..

Immagino che stiate cercando WorkingSet64 non PrivateMemorySize64. PrivateMemorySize64 è la quantità di memoria virtuale allocata per il processo, non la memoria fisica. Per la memoria fisica utilizzare WorkingSet64.

Inoltre, è necessario chiamare process.Refresh() prima di accedere a qualsiasi proprietà dinamica nella classe di processo poiché è pesantemente memorizzata nella cache.

process.Refresh(); 
_data.MemoryUsed = (process.WorkingSet64).ConvertBytesToMegabytes().ToString(CultureInfo.InvariantCulture); 
+0

ho aggiunto Aggiorna e carica il codice mentre esegui il debug come vedi la dimensione della memoria è diversa, inoltre non ci sono cambiamenti drastici nella dimensione della memoria è abbastanza stabile a 45-47mb ~ – atikot

+0

Non controllare la memoria del processo durante il debug. Esegui il processo dal debugger e controlla. Perché quando il debug di Visual Studio eseguirà il processo di hosting per te * YourProcess.vshost.exe *. Ciò può causare confusione. Ho provato questo con la stampa dell'output in console (a corto di Visual Studio) e questo ha funzionato perfettamente. Cambia anche 'Sleep (200)' in 'Sleep (1000)' in modo che si sincronizzi con il task manager. –

+0

Sto provando senza Visual Studio e debug e non è ancora corretto, non vedo nemmeno il vshost nel task manager – atikot

0

Prova una volta con il seguente codice, può essere che vi aiuterà

PerformanceCounter PC = new PerformanceCounter(); 
PC.CategoryName = "ServerProcess"; 
PC.CounterName = "Working Set - Private"; 
PC.InstanceName = JSP[0].ProcessName; //Process 
RAM_memorysize = PC.NextValue();   //float RAM_memorysize; 
PC.Close(); 
PC.Dispose();