用途:在用户报告可测量的性能症状或要求性能审查时使用。核心理念是先测量,再改动能解释症状的最小改动。
工作流:识别症状(启动、首屏渲染、滚动、导航、内存、图片加载或网络延迟);检查目标框架与配置,启动与运行时间测量优先用 Release 构建;启动分析使用 MAUI CLI 分析入口,先运行 maui profile startup --help 再按平台/设备选项运行目标应用;UI 运行时问题可借助 DevFlow 检查视觉树深度与日志;应用针对性修复后重新测量。
高价值修复方向:启动慢检查启动分析、MauiProgram 中过多工作、同步 I/O、服务急切构造、字体与图片数量;绑定慢检查缺失 x:DataType、反射型绑定、转换器昂贵计算;列表卡顿检查 CollectionView 嵌套在 ScrollView、复杂模板、缺失项尺寸策略、图片解码尺寸;布局成本检查深层嵌套、多余 Grid 嵌套、重复测量失效;图片内存检查超大源图、未用 MAUI 图片缩放、无限制远程缓存;Release 回归检查仅调试诊断泄漏到 Release、链接与裁剪差异。
图片内存建议:4000×4000 RGBA PNG 解码约占 64 MB,而 200×200 显示尺寸约 160 KB。可在项目中预先缩放到显示尺寸;用 .csproj 中 MauiImage 构建操作配合 BaseSize 自动做平台特定缩放,例如 <MauiImage Include="Resources/Images/*.png" BaseSize="400,400" />;远程图片在运行时解码到显示尺寸。注意 BaseSize 只作用于打包的构建期图片资源,不改变下载、相机、相册或用户导入图片。图标与需缩放标志宜用 WebP 或 SVG。列表行应生成或下载缩略图,绝不在 CollectionView 项模板内解码 4000×4000 图片。不要将 CollectionView 包在 ScrollView 中;项模板保持浅层并使用编译绑定;尽量使用固定或可预测的项尺寸;避免在项模板使用的属性 getter 中做昂贵工作。
启动护栏:避免在应用构造期间做网络调用与文件扫描;尽可能延迟注册服务,不为注册而实例化重服务;非关键初始化推迟到首页可见后;仅调试日志与 DevFlow 设置置于 #if DEBUG 内。
裁剪与 NativeAOT 护栏:视其为发布构建问题而非调试构建问题,用与应用相同的发布属性复现;不要盲目消除裁剪警告,如 IL2026 表示成员被移除时可能不安全;对裁剪构建中的模型与服务优先用源生成序列化器与显式注册,而非反射发现;必须反射时用 DynamicDependency 等特性或链接器描述符保持依赖显式并记录原因;发布后测试启动与受影响功能,调试运行成功不构成裁剪或 NativeAOT 安全证据。裁剪或 NativeAOT 构建中 System.Text.Json 的启动路径可迁到源生成上下文,例如 [JsonSerializable(typeof(List<Product>))] internal partial class AppJsonContext : JsonSerializerContext { },并用 JsonSerializer.Deserialize(json, AppJsonContext.Default.ListProduct) 反序列化;上下文放在应用模型或序列化基础设施附近,并纳入启动路径使用的每个 DTO 形状;当源生成序列化器可使依赖显式时,不要用宽泛的警告抑制掩盖 IL2026。
验证清单:有前后测量或测量受阻的明确原因;启动调查在适用时使用 maui profile startup;绑定密集页面使用 x:DataType;列表避免嵌套滚动与超大图片;裁剪与 NativeAOT 变更在适用时用发布构建验证;性能修复不得移除无障碍元数据或自动化解钩。
限制:资料未提供该技能的安装命令、许可与价格信息。