UI组件内存：ComMemory分析
==================

#### 功能介绍

从DevEco Studio 6.1.1 Beta1版本开始，DevEco Profiler新增ComMemory模板，可以分析UI界面各组件内存的分配情况，帮助定位UI组件内存泄漏问题。

ComMemory模板支持的泳道包括：Memory、ArkUI Snapshot、ArkTS Snapshot、All Heap & Anonymous VM、All Heap、All Anonymous VM、System Resources、Graphic Memory。本文介绍ArkUI Snapshot泳道，其他泳道的详细信息请参考对应模板内容。

*   Memory、All Heap & Anonymous VM、All Heap、All Anonymous VM、System Resources、Graphic Memory泳道的介绍请参考[基础内存：Allocation分析](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-insight-session-allocations)。
*   ArkTS Snapshot泳道的介绍请参考[内存泄漏：Snapshot分析](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-insight-session-snapshot)。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/b9/v3/6XLiRsFvRtGYQSkyAJQJ4w/note_3.0-zh-cn.png?HW-CC-KV=V1&HW-CC-Date=20260612T073913Z&HW-CC-Expire=86400&HW-CC-Sign=4CA4D2588F5C860CB4DA3C18709E6C8E27C5E8C5F1E886E7E819D6590093CBF2)

任务分析前，需创建ComMemory分析任务并录制相关数据，操作方法可参考[性能问题定位：深度录制](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/deep-recording)，或在[会话区](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-profiler-session)选择**Open File**，导入历史数据。

#### 查看组件树和组件信息

1.  开始录制后观察**Memory**泳道的内存使用情况，在需要定位的时刻单击任务左上角的![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/63/v3/pTRfArqARMSWKNXpb_r35g/zh-cn_image_0000002625073887.png?HW-CC-KV=V1&HW-CC-Date=20260612T073913Z&HW-CC-Expire=86400&HW-CC-Sign=BBCA6853DC4C27CA66EA790A2CE5361B9E19DB01649E307374C537718D776B30 "点击放大")启动一次快照，一次快照完成后会在**ArkUI Snapshot**泳道出现紫色区块。
    
    **Details**区域显示当前快照的详细信息，点击**Open**，将在[ArkUI Inspector](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-arkui-inspector)中打开相应的.arkli文件。
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/47/v3/l-Xkb3HYTKq2jPhXPYzCpA/zh-cn_image_0000002594474374.png?HW-CC-KV=V1&HW-CC-Date=20260612T073913Z&HW-CC-Expire=86400&HW-CC-Sign=BE17A085A2EB782FEDE64F32159803349CC1BA2FD7F373C0CECD77B3B16A6E75 "点击放大")
    
2.  在ArkUI Inspector中查看组件树。26.0.0 Beta1版本新增Show Free-Node Components。
    
    默认勾选**Show Component Size**和**Show Free-Node Components**，Show Component Size显示各组件的内存占用情况，Show Free-Node Components显示游离组件（未在组件树上的组件）。点击![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/9b/v3/--2mrldcQ5-5tHMlx87cuQ/zh-cn_image_0000002625073859.png?HW-CC-KV=V1&HW-CC-Date=20260612T073913Z&HW-CC-Expire=86400&HW-CC-Sign=A69A8E6347DB5D330542AE47517D30BE7182404565B79220340C148A7F23388A "点击放大")，勾选**Show Recursive Size**，显示各组件为根的子树的内存占用情况。
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/ec/v3/3MHFZlpwRWSS81li6qn1Uw/zh-cn_image_0000002624993739.png?HW-CC-KV=V1&HW-CC-Date=20260612T073913Z&HW-CC-Expire=86400&HW-CC-Sign=17AC79182475A44EB1693EC2F0BC6B41F9BDB768EAFCB2D496E3E5CCD418CF8D)
    
3.  在ArkUI Inspector中查看组件的信息。
    
    *   在ArkUI Inspector的**Memory** >**Statistics**中，查看组件的内存统计信息。
        
        *   Current：当前组件ArkTS内存和Native内存的占用情况。
        *   ArkTS：当前组件对应的ArkTS堆快照对象的[Retained Size](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-snapshot-basic-operations#li1323381634912)。
        *   Native：当前组件新增占用的Native内存。
        *   Subtree：当前组件及其子组件的Current内存之和。
        *   nativeCount：当前组件存活的Native分配内存个数。
        *   arktsCount：当前组件的ArkTS堆快照对象个数。
        *   recursive：递归统计信息。
        
        ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/13/v3/9h4fVHpZSTS2HJSUxNy6BA/zh-cn_image_0000002594634286.png?HW-CC-KV=V1&HW-CC-Date=20260612T073913Z&HW-CC-Expire=86400&HW-CC-Sign=50C4392E1C6F7D25BE0956DC228F54A43407F0A89E80D2DA4921D442F783C291 "点击放大")
        
    *   在ArkUI Inspector的**Memory** > **Details**中，点击Details中任一项后，打开DevEco Profiler查看显示组件的详情。
        
        *   ShowAllocationDetail：显示当前组件的Allocation详情。
        *   ShowSnapshotDetail：显示当前组件的Snapshot详情，系统组件不显示该项。
        *   ShowRecursiveAllocationDetail：显示当前组件及其子组件的Allocation详情。
        *   ShowRecursiveSnapshotDetail：显示当前组件及其子组件的Snapshot详情。
        
        ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/db/v3/WMzeWh3oQrazVnK3FbZIow/zh-cn_image_0000002625073875.png?HW-CC-KV=V1&HW-CC-Date=20260612T073913Z&HW-CC-Expire=86400&HW-CC-Sign=10D657E9F828C38ED6B80C898E8A25AF8BF2B7EAD84958994AA655F571AE95C9 "点击放大")
        
    *   在ArkUI Inspector的**Memory** > **State****s**中，查看UI组件的状态变量内存。
        
        memory字段表示该状态变量在对应组件的ArkTS堆快照中的Retained Size，更多请参考[查看UI组件的状态变量](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-arkui-inspector#section19923158103412)。
        
        ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/5c/v3/SZYY_h0HSDmtudbj7IUyXg/zh-cn_image_0000002594634298.png?HW-CC-KV=V1&HW-CC-Date=20260612T073913Z&HW-CC-Expire=86400&HW-CC-Sign=775EA758024AA6A91680C32C66CFF857B6DE658CE797CE5FCF1FA86FDC016F69)
        
    
4.  在中间栏点击![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/ed/v3/_W5rbzWGT-O1XT1OGUE0Uw/zh-cn_image_0000002625073867.png?HW-CC-KV=V1&HW-CC-Date=20260612T073913Z&HW-CC-Expire=86400&HW-CC-Sign=971CCB679A9762A435863B524A0D5D0EAB10823B9B64A2B96315B2B6567429BB)可以将包含内存信息的组件树快照导出到本地。

#### .arkli文件对比

从26.0.0 Beta1版本开始，支持对比.arkli文件，通过对比快速定位异常增多的组件。

1.  开始录制后观察**Memory**泳道的内存使用情况，在需要定位的时刻单击任务左上角的![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/9e/v3/tI4HFNZMSfG5l9Sn19EfOw/zh-cn_image_0000002594474382.png?HW-CC-KV=V1&HW-CC-Date=20260612T073913Z&HW-CC-Expire=86400&HW-CC-Sign=87B956FBBE89ED7EE4186997EEAE120819611362765E7C151BB6A2D49962BDF2 "点击放大")启动一次快照，一次快照完成后会在**ArkUI Snapshot**泳道出现紫色区块。
    
    **Details**区域显示当前快照的详细信息，点击**Open**，将在[ArkUI Inspector](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-arkui-inspector)中打开相应的.arkli文件。
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/d/v3/VJN49_XlQpGnNcDE6jmevg/zh-cn_image_0000002625073857.png?HW-CC-KV=V1&HW-CC-Date=20260612T073913Z&HW-CC-Expire=86400&HW-CC-Sign=BE333CE3B8B97694D49689D0ECC0FE2EAF6706BA21682C31A1077B0D00DA1861 "点击放大")
    
2.  当前打开的.arkli文件作为base文件，在Component Tree下拉框选择的.arkli文件作为Target文件，查看两个.arkli文件的比较结果，从比较结果可查看：新增组件（绿色，如Column）、删除组件（红色，如NavBar）、游离组件（灰色，如JsView），及其子组件新增（绿色，如+1576）和删除个数（红色，如-8）。点击异常增多的组件，在右侧属性面板展示组件所在代码文件，点击可跳转至具体代码。
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/6f/v3/aa-JxsSRR369_usOYRPfNA/note_3.0-zh-cn.png?HW-CC-KV=V1&HW-CC-Date=20260612T073913Z&HW-CC-Expire=86400&HW-CC-Sign=FA0277163EAA214ADE5427A8AF2AABA70C8F30BEDE2A833AC75C747B8B01B9AB)
    
    Target文件需要先点击**Open**按钮在ArkUI Inspector中打开，否则在下拉框中选不到。
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/ef/v3/XbuTEvfTREuLxW8X0fKu3Q/zh-cn_image_0000002625073881.png?HW-CC-KV=V1&HW-CC-Date=20260612T073913Z&HW-CC-Expire=86400&HW-CC-Sign=BE1D2EC962BDBE06009465A0BDED76A395749B420E318BDF1608794AD5859E1A)