我正在尝试使用诊断工具和内存使用快照来调试 C# 应用程序(使用 c++/cli 和 c++)中奇怪的内存泄漏。但我发现了一个奇怪的问题。
当我在 VS2017 中运行调试并启用堆分析时,内存消耗是恒定的,并且程序按预期运行。当 Heap Profiling 关闭时,程序会泄漏线性增加的内存。完成的工作是相同的,我在控制台中打印了工作进度,我确信这两个程序都完成了相同的工作,但是一个使用恒定内存,另一个使用线性增加的内存(当相同的工作完成时使用 2 倍内存)。从视觉上看,当使用 Heap Profiling 触发 GC 时,会释放一些内存,而在不使用 Heap Profiling 时不会释放内存。
有谁知道堆分析如何影响这一点?本机内存泄漏。
[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