2016-08-09 67 views
0

Ich profiliere meine App und finde heraus, dass Google Maps (v2.0.1) für iOS die CPU beim Erstellen von mehr als 840 Markierungen auf der Karte fixiert. Sobald ich diesen 841. Marker erstellt habe, hängt die CPU um 98%.Leistungsproblem in Google Maps für iOS, wenn mehr als 840 Markierungen auf Karte

Die Ablaufverfolgung zeigt, dass die Leistung in EntityRenderer :: Draw beendet wird. Warum zufällige 840 Marker? Wenn ich 840 Marker oder weniger rendere, dann kein Problem. Gleiches Verhalten auf Simulator und 6s Plus-Gerät.

Running Time Self (ms)  Symbol Name 
422370.0ms 98.5% 5.0  -[GMSDisplayLink displayLinkFired:] 
422364.0ms 98.5% 7.0  -[GMSEntityRendererView draw] 
422351.0ms 98.5% 0.0   -[GMSPhoenixRenderer drawIfNeeded] 
422331.0ms 98.5% 341.0   gmscore::renderer::EntityRenderer::Draw(bool) 
213215.0ms 49.7% 1373.0   (anonymous namespace)::StickerBehavior::Commit(gmscore::renderer::EntityRenderer*) 
186073.0ms 43.4% 17786.0   (anonymous namespace)::StickerBehavior::SelectFrame(UIImage*, double, double) 

Antwort

0

Die Lösung für dieses Leistungsproblem ist die UIImage für Markierungssymbol wieder zu verwenden:

let objects = objectAPI.getObjects() 

    let markerImage = GMSMarker.markerImageWithColor(UIColor.redColor()) 

    for (index, object) in objects.enumerate() { 

      let marker = GMSMarker() 
      marker.snippet = object.title 
      marker.position = CLLocationCoordinate2D(latitude: object.lat.doubleValue, longitude: object.lng.doubleValue) 
      marker.icon = markerImage           
      marker.map = mapView     
    }