【问题标题】:Performance issue in Google Maps for iOS when more than 840 markers on map当地图上有超过 840 个标记时,iOS 版 Google 地图的性能问题
【发布时间】:2016-08-10 03:02:22
【问题描述】:

我正在分析我的应用程序并发现在地图上创建超过 840 个标记时,iOS 版 Google 地图 (v2.0.1) 会占用 CPU。一旦我创建了第 841 个标记,CPU 就固定了大约 98%。

    func loadMarkers() {

    if(mapView != nil) {

        let objects = objectAPI.getObjects()

        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 = GMSMarker.markerImageWithColor(UIColor.redColor())                                        
                marker.map = mapView                
            }
        }

跟踪显示它的性能在 EntityRenderer::Draw 中被杀死。为什么随机 840 个标记?如果我渲染 840 个或更少的标记,那么没问题。在模拟器和 6s Plus 设备上的行为相同。

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)

【问题讨论】:

    标签: ios swift performance google-maps


    【解决方案1】:

    这个性能问题的解决方案是重用uiimage作为marker icon:

        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                
         }
    

    【讨论】:

      猜你喜欢
      • 2015-04-17
      • 1970-01-01
      • 2013-03-27
      • 2018-08-01
      • 2011-10-09
      • 1970-01-01
      • 2011-06-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多