Flutter DevTools ile Memory Leak Bulma ve İzleme
Flutter uygulamalarında bellek sızıntısı (memory leak) sık karşılaşılan bir sorundur. Özellikle animasyonlar, stream'ler veya global değişkenler yanlış yönetilince bellek hiç boşalmaz ve uygulama yavaşlar. DevTools Profiler bu sorunları görsel olarak bulmanın en kolay yoludur.
Bellek sızıntısının tipik nedenleri arasında dispose edilmeyen controller'lar, kapatılmayan stream'ler ve callback'lerde tuttuğumuz referanslar vardır. DevTools'u açmak için terminalden `flutter pub global activate devtools` sonra `devtools` yazarsın; tarayıcıda açılır. Uygulamayı çalıştırırken DevTools'a bağlanıp Memory sekmesine gidersin.
Burada pratik bir örnek: bir StatefulWidget'ta stream dinleyen kod yazıyoruz ve DevTools ile sızıntıyı göreceğiz.
1import 'package:flutter/material.dart';23class MemoryLeakDemo extends StatefulWidget {4@override5State<MemoryLeakDemo> createState() => _MemoryLeakDemoState();6}78class _MemoryLeakDemoState extends State<MemoryLeakDemo> {9late StreamSubscription _subscription;10List<int> dataList = [];1112@override13void initState() {14super.initState();15// YANLIŞ: subscription dispose edilmiyor16_subscription = Stream.periodic(Duration(milliseconds: 100), (i) => i).listen((event) {17setState(() {18dataList.add(event);19if (dataList.length > 1000) dataList.removeAt(0);20});21});22}2324@override25void dispose() {26_subscription.cancel(); // DOĞRU: bunu mutlaka ekle27dataList.clear();28super.dispose();29}3031@override32Widget build(BuildContext context) {33return Scaffold(34appBar: AppBar(title: Text('Memory Test')),35body: Center(36child: Text('Veri Sayısı: ${dataList.length}'),37),38);39}40}Kodu çalıştırıp DevTools Memory sekmesinde "Take Screenshot" butonuna basarsan, heap (bellek yığını) görüntüsünü alırsın. Dispose etmeden çıkış yaparsanız, bellek arttığını göreceksin. Dispose çağrılırsa stabil kalır.
Sık yapılan hatalar: AnimationController'ı dispose etmemek, provider veya GetX gibi state management'ta listener'ları temizlememek, ve global Stream'ler oluşturmak. Kod yazdıktan sonra her zaman DevTools ile test et; bellek grafiği düz kalmalı, çöp toplayıcı (garbage collector) zaman zaman onu temizlemeli ama sürekli artmamalı.
0 yorum