Как я могу определить, сколько памяти моя программа в настоящее время занимает - PullRequest
6 голосов
/ 17 сентября 2009

Относится к моему предыдущему вопросу:
Предотвращение проблем с памятью при обработке больших объемов текста

Есть ли способ определить, сколько места в памяти занимает моя программа? Я заканчиваю обработку большого количества текстового файла и обычно сохраняю обработанные объекты в памяти. Бывают случаи, когда информации будет слишком много, и мне не хватит памяти. У меня есть решение, позволяющее избежать проблемы выделения памяти, но я хочу использовать его только при необходимости, чтобы избежать подкачки страниц, что в конечном итоге приведет к снижению производительности, когда в этом нет необходимости Есть ли способ выяснить, сколько памяти я занимаю, чтобы я мог публиковать информацию только в случае необходимости?

ПРИМЕЧАНИЕ: Я ищу решение, которое моя программа может использовать для начала подкачки при необходимости.

Ответы [ 4 ]

8 голосов
/ 17 сентября 2009
long bytes = System.Diagnostics.Process.GetCurrentProcess().WorkingSet64;
5 голосов
/ 17 сентября 2009

Вы можете попробовать GC.GetTotalMemory:

Извлекает количество байтов в данный момент считается выделенным. параметр указывает, является ли это метод может ждать короткий интервал перед возвратом, чтобы система собрать мусор и доработать объекты.

Важно отметить следующую часть: «Извлекает количество байтов , которые в данный момент считаются выделенными» . Это означает, что этот метод может быть не на 100% точным - если вы знаете, что это происходит, вы сможете получить приблизительное представление об использовании виртуальной памяти в определенный момент выполнения приложения.

Редактировать: Позвольте мне теперь предложить другое решение, которое, вероятно, будет более продуктивным: используйте perfmon и CLR счетчики производительности .

3 голосов
/ 17 сентября 2009

длинные байты = System.Diagnostics.Process.GetCurrentProcess (). WorkingSet64 для более См. Здесь

3 голосов
/ 17 сентября 2009

Вам действительно нужно использовать Code Profiler. Они точно скажут вам, что происходит, где используется память и т. Д.

К вашему сведению: это редко, где вы думаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...