13

Sto provando a creare load test in alcune applicazioni. E voglio ottenere l'utilizzo della memoria solo per il processo della mia applicazione. Per fare ciò ho aggiunto Process/Working Set al mio contatore impostareIl test di caricamento non mostra più di 4 GB per Working Set PerformanceCounter

enter image description here

Il problema è la Working SetPerformanceCounter leggere i valori in byte e non contava più di valori 4294967296 che equivale a 4 GB

enter image description here

Ma la mia applicazione "funziona in modalità 64 bit" utilizza più di 4 GB di memoria
È chiaro da TaskManager vedo che ci vogliono circa 6 GB ma questo valore non appare nel grafico di test di carico.

Così come per creare personalizzato PerformanceCounter ad agire esattamente come Process/Working Set uno, ma utilizzando Kilobyte invece di byte posso ottenere i valori reali. O qualsiasi altra soluzione che mi consenta di calcolare di quanto la mia applicazione usi la memoria nel test di caricamento.

+0

Perché non basta prendere l'uscita di quella normale e dividere per 2 '<< 10' –

+0

non sto leggendo il valore di programmazione. Uso solo i set di contatori nel test di carico –

+0

È possibile creare contatori che forniscono esattamente il valore desiderato. Microsoft ha pagine su come creare contatori delle prestazioni personalizzati. – AdrianHHH

risposta

4

Ho trovato una soluzione. Grazie per tutti i tuoi commenti, tutti loro sono stati molto utili.

Il primo passo è la normale installazione di un nuovo PerformanceCounterCategory solo la cosa più importante è quello di impostarlo come PerformanceCounterCategoryType.MultiInstance esempio

var countersToCreate = new CounterCreationDataCollection(); 
var memoryCounterData = new CounterCreationData("Memory Usage", "Memory Usage", PerformanceCounterType.NumberOfItems64); 
countersToCreate.Add(memoryCounterData); 
PerformanceCounterCategory.Create("KB Memory Usage", "KB Memory Usage", PerformanceCounterCategoryType.MultiInstance, countersToCreate); 

Il passo successivo è quello di avere servizio di semplici finestre o applicazione console che dovrebbe leggere i valori per ogni processo da process.WorkingSet64 e cosa impostare la PerformanceCounter. Questa applicazione o servizio dovrebbe essere eseguito mentre si sta eseguendo il test di caricamento e, naturalmente, in modalità x64. ad es.

static void Main(string[] args) 
{ 
    while (true) 
    { 
     Thread.Sleep(500); 
     foreach (var process in Process.GetProcesses()) 
     { 
      var memoryUsage = new PerformanceCounter("KB Memory Usage", "Memory Usage", process.ProcessName, false); 
      memoryUsage.RawValue = process.WorkingSet64/1024; 
     } 
    } 
} 
0

Secondo la documentazione di PerformanceCounter.RawValue Property:

Se il tipo di contatore è un formato a 32 bit e si tenta di impostare questa proprietà su un valore che è troppo grande per entrare, la proprietà tronca il valore a 32 bit.

Quindi, è necessario utilizzare una corretta PerformanceCounterType (quelli, suffisso 64).

+5

La votazione senza lasciare alcun commento non è mai stata utile a nessuno. Cari downvoters, per favore sii così gentile e spiegami cosa non ti piace del mio suggerimento. Grazie. –

Problemi correlati