Beim Profiling meiner App mit Instruments (Suche nach Speicherlecks) bekomme ich mit dem iOS 5 iPhone Simulator extrem unterschiedliche Ergebnisse von denen, die ich mit meinem iPhone 4 mit iOS 5 bekomme. Das erste Bild zeigt die Ergebnisse aus dem Profiling mit dem echtes Gerät, und das zweite ist mit dem Simulator:
Echtes Gerät:
iOS 5 Simulator:
Dieses Profil wird in beiden Fällen an der gleichen Stelle in der App verwendet: Fertigstellung von viewDidLoad im view lifecycle des rootViewControllers. Ich habe in beiden auf den gesamten zugewiesenen Speicher gewartet, um stabil zu werden. Wie Sie im Gerätediagramm sehen können, treten einige extreme Schwankungen um etwa 00:10 auf, die im Simulator nicht vorhanden sind. Auf dem realen Gerät springt der gesamte zugewiesene Speicher um 00:08 Uhr von 1 MB auf 3,5 MB und dann wieder zurück auf 1,5 MB und springt schließlich auf 4,74, wo er sich stabilisiert. Der zugewiesene Speicher für den Simulator ist viel linearer, wobei er stetig und schnell auf etwa 2,35 MB steigt, wo er sich stabilisiert.
Eine weitere Sache, die zu beachten ist, ist das Vorhandensein von 2,25 MB zugewiesenem Speicher auf dem Gerät, aber nicht der Simulator von malloc und 700+ KB von CFNumber. Da ich mit Instrumenten und Profiling relativ neu bin, bin ich mir nicht ganz sicher, ob das normal ist. Eine schnelle Google-Suche ergab nichts definitives. Die 2,25 MB und 700 KB mehr als kompensieren den Unterschied in der Speicherzuweisung. Um die Dinge auszugleichen, gibt es mehr Einträge für malloc mit unterschiedlichen Speichermengen im Simulator-Test, die im Gerätetest nicht vorhanden sind.
Ich habe auch festgestellt, dass, wenn ein zweiter UIViewController auf den UINavigationController-Stack geschoben wird, der zugewiesene Speicher auf dem realen Gerät etwa 8,5-9 MB, aber nur etwa 4,5 bis 4,5 Megabytes übersteigt der Simulator.
Ich weiß, dass zu erwarten ist, dass das Gerät sich sehr vom Simulator unterscheidet, aber sollte die Speicherzuweisung nicht sehr ähnlich sein, weil auf beiden Geräten der gleiche Code ausgeführt wird? Ich würde verstehen, wenn dies ein Performance-Profiling ist, aber für die Speicherzuweisung scheint es, dass die Zahlen ziemlich ähnlich sein sollten. Kann jemand etwas Licht darüber werfen, ob das normal ist oder nicht?
Dieses Verhalten ist zu erwarten. Technisch gesehen, wenn Sie Profiling mit dem Simulator durchführen, messen Sie Statistiken basierend auf der Hardware Ihres Desktops. Selbst wenn Sie nur Allokationen erstellen, können Sie nicht erwarten, dass sie ähnlich funktionieren, da viele Softwareoptimierungen / Algorithmen / etc auf der Hardware basieren, auf der sie läuft.
Leider hat Apple keinen iOS Emulator . Sie können jedoch besser mit dem Gerät arbeiten, da Emulatoren dazu neigen, immer noch unzuverlässig und langsam zu sein (z. B. Android-Emulator).
Sie sollten immer Lecks auf einem iOS-Gerät und niemals auf dem Simulator ausführen. Die Ergebnisse, die Sie vom Simulator erhalten, dienen nur als Ablenkung, da sie selten zu 100% genau sind. Sie werden feststellen, dass Sie viele rote Heringe jagen! hehehe
Tags und Links iphone ios memory-management instruments