Я пытаюсь измерить в программе С# использование памяти.
Я хотел бы знать эквивалент С# этой функции Java:
ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().getCommitted()
которые представляют общую память , выделенную для кучи. Мне нужно это, чтобы узнать общий объем памяти, выделенный для моей программы на С#.
Затем в Java я могу получить использованную память с помощью:
ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().getUsed()
В настоящее время я использую это в С# для получения использованной памяти:
Process_Memory = MyProcess.PrivateMemorySize64;
Но я не совсем уверен, что это эквивалент.
Итак, в резюме, как я могу получить общее выделенное пространство для моего приложения С# и текущего использования в момент времени t?
EDIT:
Из ответов и дальнейших исследований я это определяю:
Текущая память в использовании
System.GC.GetTotalMemory(false);
Дайте количество байтов, которые в настоящее время выделены в управляемой памяти. (http://msdn.microsoft.com/fr-fr/library/system.gc.gettotalmemory.aspx)
Этот метод возвращает низкое значение, и я уверен, что это не действительно представление всей используемой памяти, поскольку я могу получить с getUsed()
в Java. В java для одного и того же приложения память начинается с 5 МБ и переходит на максимальный 125 МБ. С С# я получаю от 1 до 5 МБ с помощью вышеописанного метода.
Кажется, что
MyProcess.PrivateMemorySize64; // return ~=25MB
или
MyProcess.WorkingSet64; //return ~=20MB
Дайте более точное значение всей используемой памяти. Но я не знаю, какой я должен использовать...
Для глобальной выделенной памяти в этой статье предлагается использовать:
Process_MemoryEnd1 = MyProcess.VirtualMemorySize64;
Он возвращает всегда одно и то же значение по программе, около 169 МБ, что кажется справедливым по сравнению с Java: от 64 МБ до 170 МБ макс
Я все еще ищу точный ответ, все, что я нашел, очень расплывчато, и я не очень хорошо разбираюсь в управлении памятью Windows, я не уверен, что возьму документы, которые я нашел:/