使用 .NET 对象分配工具分析内存使用情况
创作时间:
作者:
@小白创作中心
使用 .NET 对象分配工具分析内存使用情况
引用
1
来源
1.
https://learn.microsoft.com/zh-cn/visualstudio/profiling/dotnet-alloc-tool?view=vs-2022
使用 .NET 对象分配工具分析内存使用情况
可以使用 .NET 对象分配工具查看应用使用的内存量以及代码路径分配的最大内存量。运行该工具后,可以看到正在分配对象的函数执行路径。 然后,可以追溯到占用最多内存的调用树的根。
安装
- 选择Alt+F2以在 Visual Studio 中打开性能探查器。
- 选中.NET 对象分配跟踪复选框。
- 选择“开始”按钮以运行该工具。如果在启动探查器之前启用了“在暂停后开始收集”选项,则在诊断会话视图中选择“记录”按钮之前,不会收集数据。
- 在此工具开始运行后,在应用中完成要探查的方案。 然后选择停止收集或关闭应用以查看数据。
- 选择分配选项卡。将显示类似于以下内容的内存分配数据。现在可以分析对象的内存分配。
在收集过程中,跟踪工具可能会减慢被探查的应用的速度。 如果跟踪工具或应用的性能缓慢,并且不需要跟踪每个对象,则可以调整采样率。 为此,请在探查器摘要页中选择跟踪工具旁边的齿轮符号。
将采样率调整为所需的速率。 此更改有助于在收集和分析期间加快应用的性能。有关如何提高工具效率的详细信息,请参阅优化探查器设置。
了解数据
在以下图形视图中,顶部图形显示应用中的实时对象数。 最下面的“对象增量”图显示了应用对象数变化率 (%)。红色条表示垃圾回收何时发生。
可以通过选择时间范围来筛选表格数据,以便仅显示指定时间范围的活动。 执行此操作时,选项卡中显示的信息的范围限定为筛选的时间范围。
还可以放大或缩小图形。
分配
分配视图显示分配内存的对象的位置以及这些对象分配的内存量。
以下信息显示在分配视图中:
- 类型列是占用内存的类和结构的列表。 双击某一类型,以倒调用树的形式查看其回溯。 仅在分配视图中,可查看选定类别中占用内存的项目。
- 分配列显示在特定分配类型或函数中占用内存的对象数。 此列仅显示在分配、调用树和函数视图中。
- 默认情况下,“字节”和“平均大小(字节)”列不显示。若要显示它们,请右键单击类型或分配列,然后选择字节和平均大小(字节)选项将其添加到图表。这两列类似于总计(分配)和自(分配),但它们显示占用的内存量,而不是占用内存的对象数。 这些列仅显示在分配视图中。
- 模块名称列显示包含正在调用的函数或进程的模块。
所有这些列都是可排序的。 对于类型和模块名称列,可以按字母顺序按升序或降序对项进行排序。 对于分配、字节和平均大小(字节),您可以按数值升序或降序对项目进行排序。
符号
以下符号显示在分配、调用树和函数选项卡中:
- 类似于整数的值类型
- 值类型集合,如整数数组
- 引用类型,如字符串
- 引用类型集合,如字符串数组
调用树
调用树视图显示包含分配大量内存的对象的函数执行路径。
以下信息显示在调用树视图中:
- 函数名称列显示包含分配内存的对象的函数的进程或名称。 显示基于正在检查的节点级别。
- “总计(分配)”和“总大小(字节)”列显示了已分配的对象数,以及函数及其调用的其他所有函数使用的内存量。默认情况下,总大小(字节)列处于隐藏状态。
- “自身(分配)”和“自大小(字节)”列显示了已分配的对象数,以及所选的一个函数或分配类型使用的内存量。
- 平均大小(字 byte)列显示的信息与分配视图中的信息相同。 默认情况下,此列处于隐藏状态。
- 模块名称列显示包含正在调用的函数或进程的模块。
“调用树”视图中显示的其他选项包括:
- “展开热路径”按钮突出显示了包含许多正在分配内存的对象的函数执行路径。该算法从你选择的节点开始,并突出显示大多数分配的路径,指导你进行调查。
- 显示热路径按钮显示或隐藏指示哪些节点是热路径的一部分的火焰符号。
功能
Functions视图显示分配内存的进程、模块和函数。
“函数”视图中显示的信息包括:
- “名称”列将进程显示为最高级别的节点。进程下方是模块,模块下方是函数。
- 以下列中显示的信息与“分配”和“调用树”视图中显示的信息相同:
- 总计(分配)
- 自身(分配)
- 总大小(字节)
- 自大小(字节)
- 平均大小(字节)
集合
集合视图显示垃圾回收期间收集或保留的对象数。
以下信息显示在集合视图中。
- “GC”列显示可执行文件生命周期中此垃圾回收的 ID。
- “生成”列显示垃圾回收的生成。
- “GC 类型”列显示此垃圾回收的类型。
- “GC 原因”列显示此垃圾回收事件的原因。
- “暂停持续时间”列显示由于垃圾回收器需要独占使用堆而阻止执行的时间。 对于后台垃圾回收,此值较小。
- “LOH 大小”列显示运行垃圾回收器后大型对象堆的大小。
- “POH 大小”列显示运行垃圾回收器后固定的对象堆的大小。
- “可终结 Surv (MB)”列显示具有在垃圾回收中幸存的终结器(析构函数)的对象 MB 数。
- “固定对象”列显示此垃圾回收提升的固定对象数。
- “已收集”列显示了垃圾回收器收集的对象数。
- “已保留”列显示了运行垃圾回收器后保留的对象数。
选择行时,此视图还会显示饼图,以便按类型直观展示收集的对象和存活的对象。
筛选工具
“分配”、“调用树”和“函数”视图都包含“仅显示我的代码”和“显示本机代码”选项,以及一个筛选器框。
- 显示“仅我的代码”将系统、框架和其他非用户代码折叠到[外部代码]帧中,以便仅专注于代码。 有关详细信息,请参阅使用“仅我的代码”调试用户代码。
- 显示本机代码在分析目标中显示本机代码,并且可以包含非用户代码。
- 通过筛选器框,可根据你提供的值来筛选“名称”或“函数名称”列。在框中输入字符串值。 然后,该表仅显示包含该字符串的类型。
热门推荐
地瓜的功效与作用、禁忌和食用方法
国庆外出?当心猫咪分离焦虑症,缓解焦虑症8个办法
机油黏度等级指南:如何选择最适合的机油
禽类疾病防治指南:从诊断到疫苗接种的全面解析
如何分析黄金价格的市场反应机制?这种反应机制如何影响价格的波动幅度?
佛山市人力资源盖章流程详解
客厅适合挂什么字:装饰建议与文化内涵
遂宁四中学生走进戒毒所:一场特殊的禁毒教育实践课
你真懂什么是废土?【文化潮流05期】
怎样分析销售增长的财务问题
如何在租房时做出合理安排?这种安排怎样满足生活需求?
网购7天无理由退货:这些细节你必须知道
这样吃糖才健康
【大学衔接】高中没咋讲,大学默认会的反三角函数,一个视频学懂!|高数上
黄瓜百科:品种特点、营养功效与种植技巧
图像处理中的基础滤波方法详解:从原理到代码实现
乌蒙大草原:贵州最大高山草场的自然与人文之美
坐月子吃什么补血?
新手跑者的半程马拉松指南:如何顺利完赛
江南三大名楼:黄鹤楼、岳阳楼、滕王阁的历史与文化
计算机存储容量单位及其转换关系
降抽佣、提收入、护健康……货拉拉全方位加强司机关怀
浙江老人有福了!医保多报25项,养老金还有新补贴,3月起实施
25考研初试条形码粘贴说明已发布!切忌在这个上面丢分!
三亚十大特色小吃:从红糖年糕到鸡屎藤汤圆,品味海南美食文化
合同无效后的赔偿责任
规范服用阿司匹林,这 4 条建议需牢记!
云南昭通大山包:一个低调迷人的避暑胜地
您的葡萄酒都经过哪些“洗礼”?
白衣服泛黄怎么办?5个实用清洁方法+3个预防技巧