SORU
15 Mart 2013, Cuma


GMSPolyline çok büyük bellek başak

Kullanıcı harita ve birçok farklı parça dediğimiz karmaşık konum noktalarının bir listesini görüntülemek için izin veren bir GPS uygulaması, her parça konumunu puan arasında 2k 10k oluşabilir. Rayların hemen kırpılmış, budanmış ve olmayan Google haritası türlerini görmelerini-basitleştirilmiş yolu vardır. Bu bellek kullanımı tutmak aşağı ve yukarı performans için. Biz genellikle sadece çok daha az (toplam) bin dönüştürülmüş konumu bir nokta daha OpenGL boru hattı, hatta en kötü durumda teslim rüzgar.

Entegre Google Maps SDK iOS, öncelikle teşebbüs etmek kaldıraç bizim kendi OpenGL parça işleme sistemi, ama doğru kaçmış sorunları ile çakışan OpenGL bağlam kullanımı (oluşturma çalıştı, ama bulamadım GMSMapView ve bizim kendi iç OpenGL kaynaklara açıklaması olmadan birisine dokunmak silinen bellek).

GMSPolyline yapıları kaldıraç ve sadece Google SDK parça işleme izin almaya çalışıyoruz, ama büyük bellek kullanımı sorunları çalıştırmak ve bunları geçici olarak rehberlik arıyoruz.

Böyle büyük mükafat araçlarla ilgili 23k yer toplam puan (her biri) ile ilgili 25 poly hatları oluştururken bellek kullanımını takip ediyoruz. Poli hattı oluşturma boyunca, uygulama bellek kullanımı hakkında 172), 158 MB net bir zirve için yaklaşık 14 MB büyür. Kısa bir süre sonra tüm poli hatları oluşturulur, bellek kullanımı sonunda damla geri ) ve dördüncü, toplu bir net yaklaşık 5 MB, öyle görünüyor ki her bir yeri işaret gerektirir etrafında 220 bayt (5) / 23k puan) için saklayın.

Bizi üzen en yüksek bellek kullanımı. Laboratuvar test 23k yeri işaret edilirken, gerçek dünyada genellikle pek fazla bulunmuyor, ve iOS uygulamamız sonra atmaya görünüyorGoogle Haritalarbir yaklaşık 450 MB tüketiyoriPhone 5iç poli hattımız aynı test çalışması için yaklaşık 12 MB sistem zirveleri ise render ().

Açıkça GMSPolyLine T gerektiren ağır kullanım için tasarlanmamıştır.

Ayrı autorelease havuzları ile poli hattı oluşturma döngüler bazıları sarma, ve sonra da uygun noktalarda bu boşaltma çalıştık, ama bu, bellek kullanımı üzerinde hiçbir etkisi yoktur. En yüksek bellek döngü hiç değişmedi poli hatları oluşturulur ve kontrol ana çalıştırmak için döndürüldükten sonra kullanın. Sonra neden belli oldu; Google Harita sistemi poli hatları oluşturduktan sonra ilk DisplayLink geri kadar serbest kaynakları değil.

Bizim bir sonraki çaba için el ile gaz miktarı veri ediyoruz iterek GMSPolyline, muhtemelen kullanarak kendi yansımasını test, kırpma, budama ve azaltılması, yerine güvenerek Google Maps bunu yapmak için verimli bir şekilde.

Dezavantajı burada çok daha fazla GMSPolyline nesneleri kullanıcı/harita etrafında yakınlaştırma kaydırma potansiyel olarak çalışırken ayrılan ve kaldırıldı, olacaklar. Bu nesnelerin her biri, çok daha az yer puan, ama yine de, bu yaklaşımın sonuçlarının ne için endişeleniyoruz, birçok GMSPolyline allocs ve ayırması gizli ek yük olacaktır.

Yani soru, bu durumla başa çıkmak için en iyi yaklaşım nedir, Google'dan birileri GMSPolyline en iyi uygulamalar, üst sınırları, sorunları, vb üzerinde biraz ışık tutabilir. ?

CEVAP
1 Kasım 2012, PERŞEMBE


This github proje kesinlikle size yardımcı olabilir.

- (void) renderPageAtIndex:(NSUInteger)index inContext:(CGContextRef)ctx {
CGPDFPageRef page = CGPDFDocumentGetPage(pdf, index   1);
CGAffineTransform transform = aspectFit(CGPDFPageGetBoxRect(page, kCGPDFMediaBox),
                                        CGContextGetClipBoundingBox(ctx));
CGContextConcatCTM(ctx, transform);
CGContextDrawPDFPage(ctx, page);

}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • MarinaHD2001

    MarinaHD2001

    7 ŞUBAT 2009
  • Mark Hyder

    Mark Hyder

    6 EKİM 2011
  • UberFacts

    UberFacts

    26 EKİM 2013