Jak profilować wykorzystanie pamięci i wydajność za pomocą instrumentów?

Ze wszystkich szablonów śledzenia instrumentów, uwielbiam używać:

  • Zombies do wykrywania, gdzie obiekt jest coraz over-release, świetny do debugowania błędów EXEC_BAD_ACCESS.
  • przecieki do wykrywania wycieków pamięci.
  • Animacja rdzeniowa z kolorowymi warstwami do wykrywania liczby klatek na sekundę i półprzezroczystych podglądów, świetnie nadaje się do wygładzania UITableView przewijania.

Zawsze słyszę, jak ludzie mówią, aby profilować zużycie pamięci i wydajność mojej aplikacji.

  1. dlaczego powinienem używać pamięci profilu & wydajność? Moja aplikacja działa dobrze.
  2. Jak to zrobić?

Użyłem alokacji i widzę, że moja aplikacja na iPhone ' a zaczyna się od 1 MB całkowitej przydzielonej pamięci i rośnie do 5 MB po normalnym użyciu. Co to jest zbyt duże zużycie pamięci na iPhonie? iPad? Mac?

Author: jww, 2011-07-10

3 answers

Aby odpowiedzieć na pytanie dlaczego, profilowanie użycia pamięci jest szczególnie ważne w aplikacjach na iOS, ponieważ iPhone ' y i iPady mają znacznie mniej pamięci RAM niż komputery Mac. IPhone 4 ma 512 MB PAMIĘCI RAM, ale wcześniejsze wersje miały 256 lub 128 MB. Uwzględnij PAMIĘĆ RAM używaną przez system operacyjny i wielozadaniowość, a Twoja aplikacja nie ma zbyt wiele pamięci RAM do marnowania, więc ważne jest, aby mieć świadomość, ile pamięci zużywa Twoja aplikacja.

Profilowanie wydajności jest czymś, co zwykle robisz, gdy aplikacja działa powoli. Profiluj go, aby znaleźć wolne miejsca w kodzie, dzięki czemu kod będzie działał szybciej. Jeśli Twoja aplikacja działa poprawnie, nie musisz profilować wydajności.

Aby odpowiedzieć na hows, użyj instrumentu alokacji do pomiaru zużycia pamięci. Kolumna Live Bytes w kategorii All Allocations informuje o ilości pamięci używanej obecnie przez aplikację. Analiza heapshot instrumentu alokacji mierzy wzrost pamięci w aplikacji. Użyj menu po lewej stronie paska skoku, aby wykonać analizę zrzutu sterty.

The Time Profiler instrument profiluje Twoją aplikację pod kątem wydajności. Trudną częścią korzystania z narzędzia Time Profiler jest interpretacja wyników. Narzędzie Time Profiler nie powie Ci, że Twoja aplikacja spędza 75% swojego czasu w funkcji X. musisz przekopać się przez dane, aby znaleźć wolne miejsca w kodzie.

Jeśli chodzi o dopuszczalne zużycie pamięci, zależy to od urządzeń, które chcesz obsługiwać i aplikacji. Aplikacja jak Xcode za pomocą 100 MB PAMIĘCI RAM byłoby OK, ale aplikacja jak TextEdit użycie 100 MB dla dokumentu jednostronicowego byłoby problemem. 5 MB nie powinno być problemem dla aplikacji na iOS.

 74
Author: Mark Szymczyk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-11 18:48:58

Aby odnieść się do niektórych komentarzy w odpowiedzi Marka:

Alokacje żywych bajtów nie zawierają pamięci tekstur OpenGL, która jest używana przez CALayer/UIViews. To jest źródło niezgody z monitorem pamięci.

Zobacz odpowiedź na to pytanie tutaj: zrozumienie zużycia pamięci na iPhonie

 7
Author: Calvin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:16:48

Pamięć rzeczywiście załadowana do fizycznej pamięci urządzenia to Resident Memory in VM Tracker Instrument.

Allocation Instrument oznacza tylko pamięć utworzoną przez malloc/[NSObject alloc] i jakiś bufor ramowy, na przykład dekompresowana bitmapa obrazu nie jest zawarta w Allocation Instrument, ale zawsze zajmuje większość pamięci.

Proszę obejrzeć WWDC 2012 Session 242 wydajność aplikacji na iOS: pamięć, aby uzyskać informacje od Apple.

 3
Author: CarmeloS,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-23 04:14:40