2010-11-19 14 views
3

Ich versuche eine sehr lange Startzeit für meine App zu untersuchen und könnte Hilfe gebrauchen. Es dauert ungefähr 6-7 Sekunden, um zu starten, und das ist nur viel zu lange. Ich lade keine Datensätze oder irgendetwas, aber die App ist ein Taschenrechner, so dass meine Xib viele Tasten und Schaltflächenbilder hat.Reduzierung der iPhone App Startzeit

Ich möchte Instrumente (oder etwas anderes) verwenden, um zu analysieren, wo die ganze Zeit verbracht wird, damit ich optimieren kann, aber die Dokumentation für Instrumente gibt mir nicht wirklich viel über die Verwendung es für dieses spezifische Problem und/oder wie man die Ergebnisse interpretiert.

Haben Sie Vorschläge, wie Sie das testen können? Ein Hinweis auf ein Tutorial, wie man Instrumente dafür benutzt? Ein iTunes U-Video oder etwas anderes?

Alle Vorschläge sind willkommen!

Kenny

+1

Nur eine Erinnerung für diejenigen, die daran interessiert sind zu beantworten, ich bin nicht speziell auf der Suche nach, warum es langsam ist, suche ich einen Vorschlag, wo ich lernen kann mit Profiling-Tools wie Instruments, um mir zu helfen Grund. Ich suche ein Angelhandbuch, kein Fisch. :) –

+0

Es ist schon eine Weile her, seit du gefragt hast ... du hast wahrscheinlich dieses spezielle Problem gelöst. Vielleicht könntest du dir deine eigene Antwort geben? – Palimondo

+1

Ich habe nie eine gute Antwort darüber gefunden, wo _learn_ mit Profiling-Tools zu identifizieren, um die Verlangsamungen zu identifizieren. Ich füge unten eine Antwort hinzu, in der beschrieben wird, wie ich die Startzeit meiner App reduzieren kann. –

Antwort

1

Bevor Sie einen der oben genannten Vorschläge machen:

Ist dies 6-7 Sekunden, während von XCode läuft? Oder direkt mit dem Tippen auf das iPhone beginnen?

Debugger und Instrumente werden Ihnen hier nicht viel helfen, da sie nur den Overhead erhöhen und nicht so sehr beim Profiling helfen, da sie die Daten, die Sie sehen, vergiften.

Edit:

In Bezug auf die Profilerstellung Tools können Sie in mit Shark aussehen wollen: http://www.switchonthecode.com/tutorials/using-shark-to-performance-tune-your-iphone-app

Es ist ziemlich einfach ist im Allgemeinen zu verwenden. Es ist irgendwie selbsterklärend.

+0

Nein, dies ist 6-7 Sekunden Startup am Telefon. Kein Debugger, kein xcode, usw. Ich verstehe, dass Profiler zum Overhead beitragen, aber sie sind immer noch sehr nützlich, um Engpässe und ähnliches zu finden. –

1

Hier sind einige Vorschläge:

  • tun Sie müssen alle diese Tasten auf einmal Laden auf?
  • verwenden Sie (über) Folien in Ihren Bildern?
  • sind die Bilder die genaue Größe erforderlich? Stretching (Größenanpassung) braucht Zeit, um zu berechnen
  • führen Sie eine Operation aus, die den Hauptthread blockiert?
+0

Ich habe versucht, alle Tasten zu entfernen und es rasiert nur etwa 1 Sekunde von der Startzeit. Ich glaube, ich habe alle offensichtlichen möglichen Verlangsamungen versucht, aber ich finde den Schuldigen nicht. Deshalb suche ich nicht nach einem Vorschlag, was falsch ist, aber ich suche nach Hinweisen, wo ich lernen kann, wie man Profilerstellung macht, damit ich das richtig untersuchen und herausfinden kann, wo die Verlangsamung stattfindet. –

+0

Um alle Ihre Fragen zu beantworten. Nein, ich brauche nicht alle Knöpfe vorne, aber selbst wenn ich 0 Knöpfe einlege, dauert es immer noch 5-6 Sekunden. Die Schaltflächenbilder haben zwar Transparenzen, aber ich habe sie vom Laden entfernt. Es gibt keine anderen transparenten Bilder. Alle beteiligten Bilder werden in ihrer ursprünglichen Größe verwendet, keine Größenanpassung. Keine Vorgänge blockieren den Hauptthread. Ich spawn eine Aufgabe im Hintergrund, aber ich habe überprüft, dass es nicht blockiert den Haupt-Thread und ich habe es auch einfach auskommentiert, um die Frage zu entfernen. Keine Taste schaltet sich 1 Sek. Aus. Die anderen, nichts auffallend. –

0

Ich würde die Startzeit einer leeren Dummy-App (vielleicht die XCode Window-basierte App-Vorlage) auf Ihrem tatsächlichen Gerät (Debugger getrennt) messen. Fügen Sie dann Ihren Initialisierungscode, Sichten und Objekte aus Ihrer App in diese Dummy-App ein, bis Sie feststellen, was die Startzeit am meisten verlangsamt.

2

Palimondo gefragt, wie ich schließlich mein Problem gelöst ... es war ein paar kleine Änderungen und ich bin nicht wirklich sicher, wo die Einsparungen in kam zu spielen, und ich werde, warum unten erklären.

Meine App ist ein Taschenrechner, also hat es eine Menge Knöpfe. Ich dachte zuerst, es muss der Knopf laden, der das Problem verursacht, aber wie ich in den Kommentaren zu Paul erklärte, selbst wenn ich 0 Knöpfe geladen habe, rasierte das nur 1 Sekunde von der Startzeit. Nachdem ich viele kleine Dinge geändert hatte, konnte ich 3 Sekunden Zeit sparen, was gut genug war.

Ich hatte ein Hintergrundbild, das ein schönes textured-gradient-ish-Bild war. Ich reduzierte die Dateigröße (änderte die Textur, exportierte sie mit verschiedenen Optionen).

Ich ging von Laden 100 Tasten vorne (es ist ein Taschenrechner) zu laden etwa 15, aber versuchte, es auf eine geheime Weise zu tun, damit der Benutzer nicht bemerken würde. Ungefähr 50 der Knöpfe sind sowieso nicht sichtbar um zu starten, da Sie eine Shift-Taste antippen müssen, um sie zu sehen, so dass sie leicht zu faulenzen waren. Die anderen sind sichtbar, aber ich habe mir gedacht, dass der Benutzer die meisten nicht direkt beim Start anfasst, weil sie zuerst einige Zahlen treffen müssen. Also habe ich alle Nummernblock-Schaltflächen und den Clear-Button in der Xib gelassen, damit sie beim Start geladen werden, aber alles andere von der Xib entfernt.

Das ließ mich mit einem großen leeren Bereich auf dem Bildschirm und Sie tatsächlich sehen, die Schaltflächen in den leeren Bereich ausfüllen, wie ich faul geladen (sehr schnell Füllung, aber Sie konnten den leeren Bereich sehen und dann alle Schaltflächen angezeigt). Also habe ich die Hintergrund-Farbverlaufsgrafik aktualisiert, um Bilder der Schaltflächen zu enthalten. Die Tasten scheinen dort zu sein, aber das ist nicht der Fall. Wenn der Benutzer also nicht innerhalb von 2 Sekunden einen falschen Knopf antippt, bemerkt er nie ein Problem ... und normalerweise versuchen sie einfach, diesen Knopf wieder anzutippen und bis dahin war es normalerweise Lazy-Loaded und funktioniert daher.