在鸿蒙应用开发过程中,性能优化一直是开发者面临的核心挑战之一。传统性能调优高度依赖开发者的经验积累,要求开发者不仅要精通DevEco Studio Profiler等工具的使用,还需深入理解鸿蒙系统架构、ArkUI框架原理及性能优化方法论。这种高门槛导致许多开发者,尤其是初学者,在面对性能问题时往往无从下手,只能通过反复查阅手册与典型案例来寻找解决方案,效率较为低下。

智慧调优是什么?

随着AI技术的快速发展,华为在DevEco Studio 6.0.0 Beta版本上正式推出CodeGenie智慧调优功能,基于鸿蒙性能专家知识库,重新定义性能调优的工作方式,让开发者通过自然语言交互即可完成复杂性能问题的分析与定位,大幅降低调优门槛,提升开发效率,将性能优化从“专家技能”变为“自然对话”,如同身边多了一位资深鸿蒙专家。

智慧调优能做什么?

在鸿蒙应用性能优化的实践中,开发者常常面临两类核心挑战:
冷启动和卡顿丢帧问题:这类问题的诊断与优化需要扎实的鸿蒙原理知识。开发者必须熟悉鸿蒙系统架构、ArkUI框架原理及性能优化方法论,并能精准排查调优数据,判断异常。针对此,智慧调优配备了强大的专业工具库和案例库,助力AI在海量运行数据中快速聚焦关键指标与异常模式,明确诊断问题根源,为开发者提供精准的问题解释与优化建议。
内存分析场景:相比之下,内存问题往往隐藏得更深,需要开发者熟练掌握各种常见内存分配方法,能在大量类型、对象中精准地找到关键引用链节点。因此,智慧调优为该场景设计了较为灵活的工具调用机制,支持AI模型查看内存分配详情、追踪对象引用、分析泄露路径,利用AI强大的语义分析能力进行综合推理,提供优化建议。

智慧调优典型使用场景

场景一:冷启动 & 卡顿丢帧——资深专家就在身边

传统人工排高度依赖个人经验且耗时长,因为:

1)日志分散在 Frame、ArkUI Component、Process 等 10多个模块

2)一个丢帧可能牵扯到 Ability 生命周期、线程调度、组件复用等多种维度

智慧调优的解法:工具链 + 知识库“双引擎”

1)工具链

智慧调优把鸿蒙调优数据接口封装成 20多个原子工具:

get_overtime_stage:一键抓取 Ability 冷启动各阶段耗时;

get_stuck_frames:自动比对 VSync 周期,定位丢帧帧号;

query_buildItem_in_frame_detail:检测自定义组件创建次数。

2)知识库

将华为官方文档、经典案例档案化、标准化,构建鸿蒙性能知识库。

大模型在推理时,可实时参考相似案例,把关键数据、信息直接高亮。

实战效果

同一列表内的列表项组件复用是典型的应用开发场景,如果开发者未合理使用组件复用,会带来大量创建销毁自定义组件操作的消耗,导致渲染时间过长,列表滑动时卡顿丢帧,如下图是未合理使用组件复用时调优泳道图:

通过智慧调优,可以快速分析并定位泳道中的异常数据,给出卡顿丢帧根因和优化建议

操作方式与步骤

智慧调优当前支持引导录制新调优任务和直接分析已有调优数据文件两种开启方式,开发者可通过点击Create Session录制新调优任务或点击CodeGenie图标/Open File直接分析已有调优数据文件:

开启分析任务后,AI会分阶段进行性能问题定位与分析。以卡顿丢帧场景为例, AI首先会进行超时帧定位,定位完成后,选中超时帧,点击Analyze,深入挖掘当前帧具体问题场景,找到影响性能的可能原因。

场景二:内存分析——让问题自动浮出水面

内存问题定位痛点

1)鸿蒙应用往往混合 ArkTS、C++ 等多种语言,对象生命周期交错

2)内存泄露可能潜伏在大量系统对象之间,定位困难

3)开发者真正想要的是:“告诉我哪一类对象在持续增长,以及为什么”

我们的设计:给模型三把“手术刀”

1)analyze_comparison_class:按类聚合,返回占用靠前的类信息,快速锁定“嫌疑对象”;

2)analyze_comparison_object:列出某类较大的实例对象及各自大小,观察该类的实例分布;

3)analyze_path_to_gc_root:给出某实例对象的完整引用链(到GC Root),并给出问题疑似原因。

大模型在一次推理中,可引导开发者多次调用这三把“手术刀”,最终找到真正导致泄露的根引用。

实战效果

在应用开发中,开发者经常依赖GC自动管理内存,忘记释放全局对象中存在的无用缓存,导致内存持续上涨,以下是一个常见代码示例:

对应的运行时调优内存快照界面:

通过智慧调优,可以快速缩小排查范围,给出引用链上可疑的节点以及常见原因

操作方式与步骤

智慧调优内存分析整体使用流程和冷启动/卡顿丢帧较为相似,主要区别在于若使用Snapshot模板对堆快照问题进行分析时,支持在对话框中选择单个Snapshot分析,或选择两个Snapshot进行对比分析。开启分析任务后,AI会按类聚合,返回内存占用靠前的类信息,此时选中某个类点击Analyze

AI会列出某类较大的实例对象及各自大小,继续选中某个实例对象进行分析,AI会给出某实例对象的完整引用链(到GC Root),并给出问题疑似原因。

立即体验智慧调优,让性能调优更简单

CodeGenie智慧调优旨在通过AI辅助分析,化繁为简,提升开发者性能调优效率,从基础重复的工作中解放开发者创造力,助力开发者一键解锁流畅、高性能的鸿蒙应用。

目前智慧调优开发者尝鲜预览版已上线华为开发者联盟官网,开发者可以在华为开发者联盟官网搜索“HarmonyOS 6 开发者预览版 Beta 招募”相关内容,报名体验。除了智慧调优之外,开发者还可以体验智能知识问答、代码生成、页面生成、万能卡片生成和编译报错智能分析等多种能力,进一步帮助开发者提高编码效率。

立即开始,让性能调优更简单!

CodeGenie 的 AI 辅助调优让你问题定位效率大幅提升的更多相关文章

  1. MYSQL数据库性能调优之二:定位慢查询

    windows下开启慢查询: 第一步:先查看版本 第二步查看查询日志和慢查询配置 第三步:配置开启慢查询 在my.ini配置文件的[mysqld]选项下增加: slow_query_log=TRUE ...

  2. Java 应用性能调优实践

    Java 应用性能优化是一个老生常谈的话题,笔者根据个人经验,将 Java 性能优化分为 4 个层级:应用层.数据库层.框架层.JVM 层.通过介绍 Java 性能诊断工具和思路,给出搜狗商业平台的性 ...

  3. Java程序进行调优及监控

    Java 应用性能的瓶颈点非常多,比如磁盘.内存.网络 I/O 等系统因素,Java 应用代码,JVM GC,数据库,缓存等.笔者根据个人经验,将 Java 性能优化分为 4 个层级:应用层.数据库层 ...

  4. 面试官问我:平常如何对你的 Java 程序进行调优?

    阅读本文大概需要 10 分钟. 作者:张俊城, 郭理勇, 刘建来源:http://t.cn/AiCTERJz Java 应用性能优化是一个老生常谈的话题,典型的性能问题如页面响应慢.接口超时,服务器负 ...

  5. [转载]Java 应用性能调优实践

    Java 应用性能调优实践 Java 应用性能优化是一个老生常谈的话题,笔者根据个人经验,将 Java 性能优化分为 4 个层级:应用层.数据库层.框架层.JVM 层.通过介绍 Java 性能诊断工具 ...

  6. JVM | 第1部分:自动内存管理与性能调优《深入理解 Java 虚拟机》

    目录 前言 1. 自动内存管理 1.1 JVM运行时数据区 1.2 Java 内存结构 1.3 HotSpot 虚拟机创建对象 1.4 HotSpot 虚拟机的对象内存布局 1.5 访问对象 2. 垃 ...

  7. JVM调优工具使用手册

    ​ 作为Java开发人员,我们肯定知道JDK的bin目录下有"java.exe"."javac.exe"这两个命令工具,这也是我们平时用得最多的工具.但其实bi ...

  8. 谁能真正替代你?AI辅助编码工具深度对比(chatGPT/Copilot/Cursor/New Bing)

    写在开头 这几个月AI相关新闻的火爆程度大家都已经看见了,作为一个被裹挟在AI时代浪潮中的程序员,在这几个月里我也是异常兴奋和焦虑.甚至都兴奋的不想拖更了.不仅仅兴奋于AI对于我们生产力的全面提升,也 ...

  9. JVM调优总结

    堆大小设置JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制:系统的可用虚拟内存限制:系统的可用物理内存限制.32位系统下,一般限制在1.5G~2G:64为操作 ...

  10. JVM调优总结 -Xms -Xmx -Xmn -Xss

    http://blog.csdn.net/ye1992/article/details/9344807 堆大小设置JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit) ...

随机推荐

  1. java学习篇(一)—— CPP和Java的区别之基础概念

    一些感想 写在开头,如果你是一个坚定选择工作的研究生,在CPP和Java之间反复跳转,那么有以下几种情况,建议你选CPP: 对CPP有强大的兴趣,且组内有成熟的方向,例如:高性能计算.音频开发等方向, ...

  2. 解决RuntimeError: Numpy is not available

    解决RuntimeError: Numpy is not available   这是因为Numpy 版本太高,将现有Numpy卸载 pip uninstall numpy 安装numpy=1.26. ...

  3. react开发组件并发包到npm

    Toast组件 import ReactDomCli from 'react-dom/client'; import './style.css' import React from 'react'; ...

  4. HF Papers 直播| AI for Science 专场

    AIGC热点大赛# 由 Hugging Face × OpenMMLab × ModelScope × 知乎 × 机智流等 联合发起的[AI Insight Talk]系列直播活动第三场即将开始! A ...

  5. 用 iframe 实现前端批量下载的优雅方案 —— 从原理到实战

    传统的下载方式如window.open()或<a>标签点击存在诸多痛点: 批量下载时浏览器会疯狂弹窗 HTTPS页面下载HTTP资源被拦截 今天分享的前端iframe批量下载方案,可以有效 ...

  6. 开发板、windows、虚拟机(Ubuntu)三者互连的几种方式

    写在前面 虚拟机与Windows连接的方式 桥接模式:相当于让虚拟机与win处于平级关系,我们的路由器需要分别给win和ubuntu分配ip地址,Ubuntu与win在同一段网络 NAT模式:ubun ...

  7. “秒开”时代,HarmonyOS预加载让应用启动快如闪电

    在用户体验为王的时代,应用"秒开"已成为用户对移动应用的核心期待.HarmonyOS预加载服务将应用页面的数据提前加载到本地缓存,页面打开直接从本地获取数据渲染,有效提升页面打开速 ...

  8. 2、rt-thread学习-env 设置env右键可打开

    1.env安装后,双击env.exe 2.右键蓝色区域,选择 3.之后右键后,这个东西就是,就可以在当前文件夹下打开env

  9. Good Night Mr. Lawrence

    坂本先生离开了,今天才知道. 也许每年圣诞节都会在欢乐中想起他,那一个个陪伴着我的音符. 3.28.

  10. nowcoder假日团队赛8 D-Artificial Lake

    链接:https://ac.nowcoder.com/acm/contest/1069/D 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bi ...