Профилировщик памяти VS2019 - создание снимка влияет на использование памяти? - PullRequest
0 голосов
/ 20 марта 2020

У меня есть настольное приложение WPF, которое загружает из файла очень большой сериализованный объект и выполняет на нем некоторую обработку данных. После завершения пользователь может отбросить эти данные и загрузить другой файл для обработки и т. Д. В качестве меры предосторожности из-за размера создаваемых объектов я сжимаю кучу больших объектов после каждого «запуска», используя: -

GCSettings.LargeObjectHeapCompactionMode = GCLargeObjectHeapCompactionMode.CompactOnce;
GC.Collect();

Для интереса я отображаю использование памяти в окне приложения используя GC.GetTotalMemory(false). После загрузки и обработки первого файла использование памяти увеличивается до 2,2 ГБ (да, данные настолько велики). Если затем я снова обработаю тот же файл, использование памяти увеличится до 4,4 ГБ, что предполагает, что предыдущие данные не освобождаются / не удаляются (хотя я на 99,99% уверен, что так и должно быть).

В любом случае, вот странная вещь. Если я запускаю приложение с использованием профилировщика производительности VS2019 в режиме «использования памяти», я вижу, что его график увеличивается до 2,2 ГБ при первом запуске обработки, а затем до 4,4 ГБ во втором. Но , если я сделаю снимок, использование памяти в этот момент упадет до 2,2 ГБ на диаграмме профилировщика и значения, отображаемого в моем приложении.

Если я не использую профилировщик производительности (или не делаю, но не делаю снимок), отображаемое в моем приложении использование памяти остается на уровне 4,4 ГБ и никогда не падает. Почему профилировщик (или, более конкретно, создание снимка) влияет на использование памяти?

enter image description here

1 Ответ

0 голосов
/ 20 марта 2020

Профилировщики памяти обычно запускают сборщик мусора перед сбором снимка памяти. Это, вероятно, то, что вы наблюдаете. G C, как правило, запускается только «при необходимости», особенно для полных коллекций, которые более дороги в эксплуатации.

Таким образом, наблюдаемое поведение не обязательно указывает на какую-либо проблему.

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