13

Ich versuche, load test zu einer Anwendung zu erstellen. Und ich möchte die Speichernutzung nur für den Prozess meiner Anwendung bekommen. Um dies zu tun habe ich Process/Working Set meinem ZählerAuslastungstest zeigt nicht mehr als 4 GB für Working Set PerformanceCounter

gesetzt

enter image description here

Das Problem ist die Working SetPerformanceCounter die Werte in Bytes gelesen und nicht Werte zählen mehr als 4294967296 die GB bis 4 gleich

enter image description here

Aber meine Anwendung "läuft im 64-Bit-Modus" verwendet mehr als 4 GB des Speichers
Es ist klar von TaskManager Ich sehe, dass es etwa 6 GB dauert, aber dieser Wert erscheint nicht im Auslastungstest Grafik. So

wie zu schaffen maßgeschneiderte PerformanceCounter zu handeln genau wie Process/Working Set man aber Kilobyte anstelle von Bytes ich kann die realen Werte erhalten. Oder irgendeine andere Lösung, die es mir ermöglicht, zu berechnen, wie viel meine Anwendung Speicher im Belastungstest verwendet.

+0

Warum nicht einfach den Ausgang der normalen und dividieren durch '2 << 10' –

+0

Ich lese nicht den Wert programmgesteuert. Ich verwende im Lasttest nur Counter-Sets. –

+0

Sie können eigene Counter erstellen, die genau den gewünschten Wert liefern. Microsoft verfügt über Seiten zum Erstellen benutzerdefinierter Leistungsindikatoren. – AdrianHHH

Antwort

4

Ich fand eine Lösung. Danke für all Ihre Kommentare, alle waren sehr hilfreich.

Der erste Schritt ist das normale Installation neue PerformanceCounterCategory nur das Wichtigste, was es als PerformanceCounterCategoryType.MultiInstance zum Beispiel eingestellt ist

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); 

Der nächste Schritt ist einfach Windows-Dienst oder Konsolenanwendung zu haben, die die Werte für die einzelnen Prozesse von process.WorkingSet64 und setzen Sie sie auf Ihre PerformanceCounter lesen sollte. Diese Anwendung oder dieser Dienst sollte ausgeführt werden, während Sie Ihren Auslastungstest und natürlich im x64-Modus ausführen. z.B.

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

Gemäß der Dokumentation von PerformanceCounter.RawValue Property:

Wenn der Zählertyp eine 32-Bit-Größe ist und Sie versuchen, diese Eigenschaft auf einen Wert zu setzen, der zu groß ist zu passen, kürzt die Eigenschaft den Wert zu 32 Bits.

So haben Sie eine korrekte PerformanceCounterType (diejenigen, suffixed mit 64) zu verwenden.

+5

Das Abstimmen ohne Kommentare zu hinterlassen, war für niemanden nützlich. Liebe Downvoters, bitte sei so nett und erkläre mir, was dir an meinem Hinweis nicht gefällt. Vielen Dank. –