Измерение и профилирование памяти .net - PullRequest
1 голос
/ 04 февраля 2011

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

Редактировать: ОК, вот мой реальный сценарий и цель. Я работаю над приложением WPF, которое работает с большими объемами данных, считываемых через USB-устройство. В какой-то момент приложение выделяет около 700+ МБ памяти для хранения всех данных List, которые оно анализирует, анализирует и затем записывает в файловую систему. Когда я записываю данные в файловую систему, я очищаю все списки и располагаю все коллекции, которые ранее содержали большие данные, чтобы я мог выполнить другую обработку данных. Я хочу знать, что я не буду сталкиваться с проблемами производительности или в конечном итоге использовать всю память. Я в порядке с моей программой, использующей много памяти, но я не очень хорошо с ней использую все это после нескольких обработок USB. Как я могу обойти это? Используются ли профили памяти или процесса в таком случае? Просто используя диспетчер задач, я вижу, что мое приложение занимает 800 МБ памяти, но после очистки коллекций память остается прежней. Я понимаю, что это не произойдет, если Windows не нуждается в этом, поэтому мне было интересно, могу ли я точно знать, что память очищена и свободна для использования (моим приложением или окнами)

Ответы [ 4 ]

2 голосов
/ 04 февраля 2011

Очень сложно измерить использование «реальной памяти» в Windows, если вы имеете в виду физическую память. Больше всего вы хотите что-то еще, как:

  1. Объем памяти, выделенный для процесса (см. Ответ Zooba)
  2. Объем выделенной управляемой памяти - CLR Profiler или любой другой профилировщик, перечисленный в этом - Лучший .NET профилировщик памяти и производительности?
  3. Что диспетчер задач сообщает для вашего приложения

Обратите внимание, что нет необходимости, чтобы после завершения сборки мусора объем памяти, выделенный для вашего процесса (1), изменялся - GC может сохранять выделенную память для будущих управляемых выделений (это поведение не относится к CLR для аллокации памяти - большая часть памяти распределители сохраняют свободные блоки для последующего использования, если только они не будут освобождены каким-либо образом). Блог http://blogs.msdn.com/b/maoni/ является отличным источником информации о ГХ / памяти.

2 голосов
/ 04 февраля 2011

Process Explorer предоставит вам всю необходимую информацию. В частности, вам, вероятно, больше всего будет интересен график «истории частных байтов» для вашего процесса.

В качестве альтернативы можно использовать системный монитор Windows для отслеживания вашего конкретного приложения. Это должно дать идентичную информацию для Process Explorer, хотя и позволит вам записать действительные числа в отдельный файл.

Process Explorer window

(Картинка, потому что я могу ...)

1 голос
/ 04 февраля 2011

Я лично использую SciTech Memory Profiler
Он имеет опцию в реальном времени, которую вы можете использовать, чтобы увидеть использование вашей памяти. Это помогло мне найти ряд проблем с утечкой памяти.

0 голосов
/ 29 января 2013

Попробуйте ANTS Profiler.Это не бесплатно, но вы можете попробовать пробную версию.


http://www.red -gate.com / products / dotnet-development / ants-performance-profiler /

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