2012-10-21 31 views
5

Belirli bir işlemi geliştirmek için Aletlerin Zaman Profilcisini nasıl kullanacağına dair tavsiyelerde bulunmaktayım. İçeriğini talep üzerine yükleyen bir sayfa kaydırma görünümü var. Yeni bir sayfa kaydırıldığında, diğeri sağa iki sayfa yüklenir. Bu, mevcut sayfa ekranın% 50'sinde kaydırıldığında ve daha yavaş cihazlarda yükleme, şişenin düzgünlüğünü kesintiye uğratan bir şişe boynu yeterli olduğunda gerçekleşir. Kaydırma,% 50 pintte çok kısa bir süre duraklar ve sonra tekrar harekete geçer.Cihazları kullanarak kıyaslama performansı

Uygulamamın ağ bileşeni olmadığına dikkat etmeliyim, bu nedenle veri alınırken şişe boynu değil, hepsi yeni görünümün yüklenmesidir.

Bunu iyileştirmeye çalışırken, geçişlerimi karşılaştırmalıyım, böylece geliştirmelerimin etkisini değerlendirebiliyorum. WWDC oturumlarını izledikten sonra, zaman profesörünün temellerini anlıyorum ama emin değilim, doğru şeye bakıyorum.

Enstrümanı çalıştırıyorum ve sonra kaydı yürütüyorum. CPU aktivitesinde beklenen artışı görüyorum. Sonra spike'ı seçip sembol isimlerine bakıyorum. Aşağıda gördüğünüz gibi, sistem kütüphanelerini gizlediğimde ve Obj-C'yi gösterdiğimde, 81.0 ms'lik çalışma süresinde% 90'lık bir artışla uğraşıyorum. Benim koduna detaya zaman

enter image description here

Benim karışıklık geliyor. En büyük katkıda bulunanlardan birinin (23 ms) sadece sortedArrayUsingDescriptors'u kullanan küçük bir rutin olduğunu görüyorum. Bununla ilgili fazla bir şey yapamam. Diğer zamanlarda kök neden CGRectInset kullanacak - birkaç milisaniye. Sanırım görüntü kullanımıyla ya da bunun gibi bir şeyle ilgili daha fazla şey görmeyi bekledim.

Sanırım doğru şeyleri karşılaştırıp karşılaştırmadığımı bilmiyorum. Gerçekten 6ms operasyonlarımı 5 ms'ye indirmeyi denemek ve azaltmak istedim ve bir fark görmeyi bekledim mi? Sorunumu teşhis etmek için doğru araçlara bakıyorum mı?

Ne ölçeceğime ve çabalarıma odaklanacağım herhangi bir ipucu veya talimat gerçekten değerli olacaktır.

+0

Dizi sıralaması zaman alıyorsa, çabalarınızı odaklamanız gereken yerdir. Diziyi neden sıralıyorsun o zaman? Ön sıralama yapılabilir mi? Bir dizi olmak zorunda mı? – jrturton

+1

Ve enstrümanlarınızın kullanımıyla ilgili olarak doğru şeyi yaptığınız anlaşılıyor. Bu yöntem ve cellForRowAtIndexPath zamanınızın çoğunun nereye gittiği gibi görünüyor. Kaynak kodunuzdaki gerçek sıcak noktaları göstermek için çift tıklayın. – jrturton

+0

Bir göz attığınız için teşekkür ederiz. Bir dizi öğe ile temel veri sınıfım var. Kolaylık sağlamak için, o sınıfa bir orderItems yöntemi ekledim. Örneğin bir hücrenin metnine ihtiyacım olduğunda, doğru öğeyi bulmak için orderItems'i kullanırım. Belki birkaç ms sonra, bunu sınıfta önbelleğe ayırabilirim ve bir şekilde eşya değiştiğinde bir şekilde güncelleyebilirim. –

cevap

1

Arka plan iş parçacığında olabildiğince fazla UI işini (getirme, sıralama, seçme vb.) Yapmak için büyük merkezi dağıtımı kullanmayı düşünün. Bu, çoklu işlemci makinelerinin gücünü artıracak ve ana parçacığı daha hızlı bir şekilde çıkaracaktır. Sadece ui için ana iş parçacığı gerektiği gibi çalışır.