使用VS2022 Performance Profiler进行Native内存分析
注:勾选Memory Usage进行Native内存抓取
Memory Profiler Settings
不带pdb进行Native内存抓取
点击Start按钮开始进行内存分析
点击“Stop Collection”按钮,来结束Profile。
注:如果报如下错误:Failed to load memory usage view: System.NullReferenceException,需要将VS2022升级到最新或使用VS2019
注1:Native Allocations为当前Native内存分配次数(不包含被释放的)
注2:Native Heap Size为当前的Native堆大小(不包含被释放的)
注3:点击橙色框的数字,则会打开Snapshot(快照) 1与Snapshot(快照) 2的diff数据
点击绿框数字,打开Snapshot(快照) 1的Native Memory数据
注1:Unresolved allocations为数据类型未确定的未分类分配(一般是没有符号表导致的)
注2:右上角Compare With Baseline下拉框中,可以选择其他的Snapshot(快照),来查看两个Snapshot(快照)之间的diff数据
双击Unresolved allocations,得到如下列表:
注:里面每一项都为一次Native内存分配
点击Stacks标签,以堆栈聚类的方式来查看Native内存分配
带pdb进行Native内存抓取
如果把pdb文件与exe文件放在一起,则Profile时会自动进行符号解析
重新运行Performance Profiler,抓取一个41.40s的Snapshot(快照),此时可以看到地址已经被解析成了符号
点击mytest1-win64-debug!FStatMessage,得到如下列表:
点击Stacks标签,以堆栈聚类的方式来查看Native内存分配
注1:点击Stacks标签页会执行归类操作,非常卡 -- vs2019不卡
注2:展开树节点不卡,但是选中某行时非常卡 -- vs2019不卡
VS2019
点击View Heap Contents得到: