Próbuję zmierzyć, w programie C#, użycie pamięci.Jak zmierzyć zużycie pamięci za pomocą C# (jak możemy zrobić w Javie)?
Chciałbym poznać C# równowartość tej funkcji Java:
ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().getCommitted()
które przedstawiają całkowitą pamięć przydzieloną na stercie. Potrzebuję tego, aby poznać całkowity rozmiar pamięci przydzielonej dla mojego programu C#.
Następnie w Javie można uzyskać używany pamięć:
ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().getUsed()
Obecnie używam to w C#, aby przyzwyczaić Pamięć:
Process_Memory = MyProcess.PrivateMemorySize64;
Ale nie jestem całkowicie pewien, że jest to równowartość.
Więc w życiorysu w jaki sposób mogę uzyskać całkowite przydzielone miejsce dla mojej aplikacji C# i bieżącego użycia w czasie t?
EDIT:
Od odpowiedzi i dalsze badania mam określić następująco:
Obecny używanej pamięci
System.GC.GetTotalMemory(false);
Podać numer bajtów currentl y przydzielone w zarządzanej pamięci. (http://msdn.microsoft.com/fr-fr/library/system.gc.gettotalmemory.aspx)
Metoda ta zwraca niską wartość i jestem pewien, że tak naprawdę nie jest to reprezentacja wszystkich pamięci użytkowej jak mogę dostać z getUsed()
w Java. W java dla tej samej aplikacji używana pamięć zaczyna się od 5MB i przechodzi do 125MB max. Z C# otrzymuję od 1 do 5 MB przy pomocy powyższej metody.
Wydaje się, że:
MyProcess.PrivateMemorySize64; // return ~=25MB
lub
MyProcess.WorkingSet64; //return ~=20MB
Daj dokładniejsze wartości wszystkich pamięci użytkowej. Ale nie wiem, z którego powinienem skorzystać ...
Dla globalnego przydzielonej pamięci na this article sugeruje używać:
Process_MemoryEnd1 = MyProcess.VirtualMemorySize64;
powrót zawsze taką samą wartość wzdłuż programowo, około 169MB, że wydaje się być sprawiedliwy w porównaniu do Javy: od 64 MB do 170 MB max
ja nadal poszukuje dokładnej odpowiedzi na wszystkie znalazłem jest bardzo niejasne i nie jestem bardzo obeznany z zarządzaniem pamięcią systemu Windows, nie jestem pewien do undertand docs znalazłem:/
Tak wiem, że to jednak Podaj rzeczywisty rozmiar obiektów w sterowanej stercie, jest to niska wartość. Nie sądzę, że jest to reprezentatywne dla całej przydzielonej pamięci. –
Następnie uważam, że wystarczy użyć wszystkich właściwości klasy "Process", jeśli chcesz mieć przydzieloną surową pamięć (tzn. Nie uwzględniając żadnej z zarządzanych funkcji GC). 'PagedMemorySize64',' PrivateMemorySize64', itp. – Tyson
Dzięki, więc myślę, że jeśli chcę tylko całkowita pamięć przydzielona procesowi 'PrivateMemorySize64' może wystarczyć. Nie dostaję tego, co jest stronicowaną pamięcią ... –