mapbox / mapbox/mapbox-maps-flutter
Exponential memory usage until crash with PolylineAnnotationManager.createMulti
Nessuno ha ancora preso questa issue.
- Lingua principale
- Dart
- Stelle
- 380
- Fork
- 204
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Descrizione
Using PolylineAnnotationManager.createMulti the memory usage increases with each iteration.
With a slower iteration speed the increase is less dramatic.
```dart
import 'dart:async';
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:mapbox_maps_flutter/mapbox_maps_flutter.dart';
List polylines = [];
void main() async {
WidgetsFlutterBinding.ensureInitialized();
MapboxOptions.setAccessToken("");
var data = json.decode(await rootBundle.loadString("path.json")) as List;
for(var n = 0; n < 10; n++) polylines.addAll(data.map((e) => PolylineAnnotationOptions(
geometry: e,
lineWidth: 5.0,
lineColor: Colors.red.value,
lineJoin: LineJoin.ROUND,
)).toList());
runApp(MaterialApp(home: MapSample()));
}
class MapSample extends StatefulWidget {
@override
State createState() => _MapSampleState();
}
class _MapSampleState extends State {
final locationSettings = LocationComponentSettings(
enabled: true,
showAccuracyRing: true,
pulsingEnabled: false,
puckBearingEnabled: true,
puckBearing: PuckBearing.HEADING
);
Stream? location;
PolylineAnnotationManager? polylineAnnotationManager;
@override
initState() {
super.initState();
}
@override
Widget build(BuildContext context) => Scaffold(
body: MapWidget(
key: ValueKey("map"),
cameraOptions: CameraOptions(center: Point(coordinates: Position(-122.04160728, 37.33676622)), zoom: 12, pitch: 0.0),
onMapCreated: (mapboxMap) async {
await Future.wait([
mapboxMap.scaleBar.updateSettings(ScaleBarSettings(enabled: false)),
mapboxMap.gestures.updateSettings(GesturesSettings(rotateEnabled: false)),
mapboxMap.attribution.updateSettings(AttributionSettings(clickable: false, iconColor: 1)),
mapboxMap.location.updateSettings(locationSettings),
]);
polylineAnnotationManager ??= await mapboxMap.annotations.createPolylineAnnotationManager();
Timer.periodic(const Duration(milliseconds: 100), (_) async {
polylineAnnotationManager!.deleteAll();
await polylineAnnotationManager!.createMulti(polylines!);
});
}
)
);
}
```
https://github.com/ristiisa/mbmemleak/tree/annotations
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Start with the PolylineAnnotationManager.createMulti and deleteAll calls in the provided Dart reproduction, especially the Timer.periodic loop. Run the mbmemleak/annotations reproduction and monitor memory while repeating the loop; done means repeated deletion and creation no longer causes unbounded memory growth or a crash.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- dart, flutter
- Ambito
- mobile
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 35/100