/ / Analiza systemu iOS za pomocą modułu śledzenia VM. Brudna i rezydentna pamięć powoduje ostrzeżenia o pamięci, co mam zrobić? - iphone, ios, pamięć, zarządzanie pamięcią, ostrzeżenie o pamięci

Analiza systemu iOS za pomocą modułu śledzenia VM. Brudna i rezydentna pamięć powoduje ostrzeżenia o pamięci, co mam zrobić? - iphone, ios, pamięć, zarządzanie pamięcią, ostrzeżenie o pamięci


Witaj, społeczność, Próbuję debugować toTa aplikacja działa online i buforuje całą zawartość systemu plików, zapisując wszystkie ścieżki (wiele ścieżek) w pamięci (błędne podejście widzę, ale muszę nad tym popracować). Ta aplikacja ma opcję pobierz całą zawartość i wypełnij pamięć względnymi ścieżkami.
Problem polega na tym, że gdy zaznaczam tę opcję, aplikacja rozpoczyna pobieranie i buforowanie, ale zanim się zakończy, ulega awarii. Na symulatorze wszystko działa dobrze.
Dziennik raportów awarii informuje o ostrzeżeniu o pamięcii aplikacja zabita przez Jetsama. Śledząc aplikację z przydziałem na instrumentach, widzę, że bajty na żywo są "sprawiedliwe" około 7 Mb, to pomaga także użycie mechanizmu płukania dodanego podczas pobierania, który zwalnia stare ścieżki po zakończeniu pobierania.
W ogóle nie ma widocznych wycieków.
Zacząłem używać VMTracker i zauważyłem, że pamięć rezydentna i brudna są dość wysokie, ze szczytami około 61 Mb i 21 MB. Jest coś, czego nie dostaję.
Przeczytałem wiele pytań na ten temat
Co oznacza "Dirty" i "Resident" w odniesieniu do Virtual Memory?
Jak mogę pozbyć się brudnej pamięci rezydenta w Objective-C?
Ale odkąd wypuszczam większość ścieżek stworzonych tam, skąd pochodzi inne brudne wspomnienie i jak mogę je wyczyścić?
Dzięki,
Andrea

Odpowiedzi:

6 dla odpowiedzi № 1

Cóż, znalazłem rozwiązanie, które chyba ...wykonując różne testy, dowiedziałem się, że prawdopodobnie połączenia buforują coś, więc ustawiłem NSBacache 0byte. Moja aplikacja wydaje się teraz działać z bardzo małą ilością brudnej pamięci, prawie o połowę. Duża poprawa. Oto niesamowite dwie linie kodu.

[[NSURLCache sharedURLCache] setMemoryCapacity:0];
[[NSURLCache sharedURLCache] setDiskCapacity:0];

Mówiąc, że niektóre rozmowy Apple o brudnej pamięci również może reprezentować pamięć podręczną danych, nadal nie próbowałem ustawić polityki pamięci podręcznej w żądaniu URL, ale prawdopodobnie efekt będzie taki sam.

Mam nadzieję, że komuś pomogę.