dart-memory について
モバイル開発者向けの Dart メモリ管理スキルです。リソースのライフサイクル、割り当て負荷、Isolate、画像サイズ、リーク調査、大規模データの分割処理を扱います。
主な機能
- 01ライフサイクル資源の解放
- 02短命オブジェクトの割り当て削減
- 03重い処理を Isolate に移行
- 04画像のメモリ使用量を制限
- 05DevTools によるリーク調査
- 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 は短命なオブジェクトに最適化されています。ただし、1 フレーム内で数千のオブジェクトを生成すると、依然としてジャンクが発生する可能性があります。
- オブジェクトの再利用:
build()や高頻度のループ内で新しいオブジェクトを生成することは避けてください。可能な限りデータ構造を再利用します。 - 大きなコレクション: リスト自体が長命である場合、大きなリストをクリアする (
list.clear()) ほうが、新しいリストに再代入するよりも適しています。
モバイル特有の事項
- Isolate: 負荷の高い計算 (1MB を超える JSON パース、画像処理) には
Isolate.run()を使用してください。これによりメインスレッドが解放され、UI のフリーズを防げます。 - 画像メモリ:
Image.networkやImage.assetでcacheWidthとcacheHeightを使用して、高解像度の画像をフルサイズでメモリに読み込まないようにしてください。 - メモリリーク: DevTools の Memory View を使用して、コンテキスト (画面など) が閉じられた後もヒープに残り続ける「リーク」オブジェクトを特定します。
大規模データの処理
- ページネーション: データセット全体をメモリに読み込まないでください。サーバー側またはローカルデータベース (Isar、SQLite) のページネーションを使用します。
- ストリーミング: 大きなファイルやリアルタイムデータの場合、コンテンツ全体をメモリにバッファリングするのではなく、
Streamを使用してデータをチャンク単位で処理します。
コメント
Markdown 対応