MK-Gii Ответов: 1

Получить использование памяти конкретной части приложения


У кого-нибудь есть идеи, есть ли простой способ измерить, сколько памяти потребляет определенная часть приложения?
Например, у меня есть приложение, которое загружает текстовые файлы, обрабатывает их и берет другой. Мне нужно измерить, сколько памяти заняла обработка одного файла.
Я знаю, что мог бы остановить GC и сделать снимки памяти, но это повлияло бы на производительность, и никто не рекомендует делать это для такой цели.

Есть еще какие-нибудь идеи по этому поводу?

кстати - меня не интересует ни один инструмент профилирования, так как мне нужно регистрировать это использование памяти в БД.
И таких миров повсюду много.

Спасибо!

Что я уже пробовал:

немного погуглил.
прочтите несколько статей на MSDN

1 Ответов

Рейтинг:
0

Dominic Abraham

Вы пробовали использовать приведенный ниже метод ?

GC.GetTotalMemory(true)


Это вы можете использовать в начале / конце метода и получить разницу.

С уважением
Доминик


MK-Gii

что делать, если метод работает в течение ~10-20 секунд?
Буду ли я уверен, что GC не очищает материал и таким образом искажает фактические значения?

Dominic Abraham

Я не думаю , что это будет искажать какие-либо значения. GC.GetTotalMemory(true), он будет ждать короткого интервала, пока система собирает мусор.

MK-Gii

Хорошо. Давайте представим себе ситуацию.
1. Получение использования памяти перед вызовом метода (допустим, это 10 Мбайт)
2. метод запуска, и он делает следующее:
2.1. хранить в памяти 15 МБ текста.
2.2. обрабатывает строковые данные и сохраняет результат (50 КБ) в памяти.
2.3. текстовые данные больше не требуются, поэтому GC собирает их.
2.4. метод завершается.
3. Опять памяти с GC.GetTotalMemory (true).

Теперь я ожидаю, что он вернет 10 МБ + 50 КБ (10,05 МБ), и это плохо, так как я пропускаю основную статистику - сколько памяти требуется для обработки моего метода. Таким образом, я должен был получить 15,05 МБ (общая память, используемая конкретным методом)

Или я где-то ошибаюсь?