关于 dart-memory
面向移动开发者的 Dart 内存管理技能,涵盖资源生命周期、分配压力、Isolate、图像尺寸、泄漏排查,以及避免一次性加载大数据集。
主要功能
- 01释放具有生命周期的资源
- 02减少短期对象分配
- 03使用 Isolate 执行重任务
- 04限制图像内存占用
- 05通过 DevTools 检查泄漏
- 06分页或流式处理大数据
适用场景
- 01避免屏幕关闭后的资源泄漏
- 02减少频繁分配造成的卡顿
- 03让重计算远离主线程
- 04处理大型文件或数据集
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ dhruvanbhalara/ skills --skill dart-memory安装后在 Claude Code 中输入/dart-memory确认已加载。
详细介绍
内存管理
移动设备的 RAM 有限。高效的内存管理对于防止崩溃并确保流畅的用户体验至关重要。
资源生命周期
- 显式释放:始终在
dispose()方法中关闭StreamController、Timer、FocusNode和ChangeNotifier。 - 延迟初始化:使用
late将对象创建推迟到实际需要时,从而减少初始内存占用。
垃圾回收(GC)压力
- 分代 GC:Dart 的 GC 针对短生命周期对象进行了优化。不过,在单帧中创建数千个对象仍可能造成卡顿。
- 对象复用:避免在
build()或高频循环中创建新对象。尽可能复用数据结构。 - 大型集合:如果列表本身会长期存在,清空大型列表(
list.clear())比将其重新赋值为新列表更好。
移动端特性
- Isolate:对于繁重的计算(解析超过 1 MB 的 JSON、图像处理),使用
Isolate.run()。这样可以让主线程保持空闲,避免 UI 卡顿。 - 图像内存:在
Image.network或Image.asset中使用cacheWidth和cacheHeight,避免将高分辨率图像以原始尺寸完整加载到内存中。 - 内存泄漏:使用 DevTools Memory View 查找在其上下文(如屏幕)关闭后仍留在堆中的“泄漏”对象。
大数据处理
- 分页:切勿将完整数据集加载到内存中。使用服务端或本地数据库分页(Isar、SQLite)。
- 流式处理:对于大型文件或实时数据,使用
Stream分块处理数据,而不是将全部内容缓冲到内存中。
评论
支持 Markdown