Средства Visual Studio Diagnosti c измеряют общий объем памяти, используемой потоками приложения, или текущую используемую память в данный момент?
У меня есть приложение, которое считывает данные с 34-мегапиксельной камера со скоростью 3 кадра в секунду. Получается математика, что он обрабатывает 288 МБ в секунду, или около 17 ГБ в минуту. Имея это в виду, приложение, очевидно, потребляет много данных, как только оно начинает собирать кадры камеры. Я немного прикоснулся к диагностическим инструментам по причинам, которые вы можете увидеть ниже:
Я позволил приложению работать с профилировщик производительности в течение примерно 3 минут, и в итоге он сообщает об общем объеме памяти процесса около 31 ГБ, как показано ниже:
My Ноутбук имеет только 16 ГБ оперативной памяти, поэтому на первый взгляд я думаю, что приведенная выше картинка в основном отвечает на мой вопрос Тем не менее, сразу после отметки 2: 30 минут вы можете увидеть резкое снижение памяти, что не имеет смысла (я не верю, что что-то изменилось в работе программы). Кроме того, когда я открыл диспетчер задач, я увидел, что мое приложение использует около 9 ГБ памяти, а затем сократило объем памяти до 3 ГБ с отметки 2: 30 мин.
Со всем этим в помните, что на самом деле измеряет Process Memory?
Поскольку решение было скрыто в комментариях к принятому ответу, я кратко опишу решение здесь, для моей общей проблемы, почему моя программа использовала столько памяти. Это было связано с ошибкой, когда я не избавлялся от растровых изображений. Битовые карты - неуправляемая память; если вам не удастся утилизировать их до того, как они go выйдут из области видимости, они продолжат жить в памяти (вне вашего сборщика мусора), пока не будет достигнут порог в количестве неуправляемых объектов. Только при достижении этого порога неуправляемые объекты будут удалены. Это то, что происходило в моей программе, когда она уменьшилась с ~ 31 ГБ памяти до приблизительно 5 ГБ памяти.