Я пытаюсь отладить странную утечку памяти в приложении C # (использует c ++ / cli и c ++) с помощью инструмента диагностики и снимков памяти.Но я обнаружил одну странную проблему.
Когда я запускаю отладку в VS2017 с включенным профилированием кучи, потребление памяти остается постоянным, и программа работает, как и ожидалось.Когда профилирование кучи выключено, программа пропускает память, которая имеет линейное увеличение.Выполненная работа такая же, у меня есть прогресс работы, напечатанный на консоли, и я уверен, что обе программы выполнили одну и ту же работу, но одна использует постоянную память, а другая имеет линейно увеличивающуюся память (когда та же самая работа сделана, 2x использованная память).Визуально это выглядит так, что когда GC запускается с помощью профилирования кучи, освобождается какая-то память, а при использовании профилирования кучи память не освобождается.
Кто-нибудь знает, как это может повлиять на профилирование кучи?Утечка в основной памяти.
[EDIT1] Данные из Performance Profiler -> Использование памяти
Object Type Reference Count Module
shared_ptr_cli<GeoAtomAttributes> TestBackEnd64.dll
shared_ptr_cli<GeoAtomAttributes> [Finalization Handle] 856,275 TestBackEnd64.dll
shared_ptr_cli<GeoAtomAttributes> [Local Variable] 1 TestBackEnd64.dll
GeoAtomAttributesCli [Local Variable] 1 TestBackEnd64.dll