8

Tworzę aplikację macierzystą Windows 8. Moja aplikacja ulega awarii po przejściu przez jakiś czas w aplikacji. Podczas analizy za pomocą profilera pamięci stwierdziłem, że za każdym razem, gdy przechodzę z jednej strony na drugą, zużycie pamięci wzrasta w stosunku do mnie ustawiając null wszystkie obiekty listy, webclient, string i tak dalej na wartość null i wywołując GC.Collect po tym na Nawigowano z Eventu.Przeciek pamięci w telefonie z systemem Windows 8

Po pierwsze myślałem, że to ze względu na obrazy, a więc usunąłem zdjęcia z aplikacji i przetestowane, ale nadal nie ma zmiany w wykorzystaniu pamięci aplikacji. W jakiś sposób GC.Collect nie działa i zwalnia pamięć.

Próbowałem wymienionych poniżej rzeczy, ale moim pechem nie jest działanie do zwolnienia pamięci, zamiast tego wynik pozostaje ten sam.

  • mam ustawić urisource obrazu na null przed ustawieniem nowego źródła, a następnie zadzwonić gc.Collect uwolnić zużycie pamięci, ale nie wydaje się, aby uwolnić ją

  • Po drugie, mam ustawione wszystko obiekty mają wartość NULL i wywołują GC.Collect(), ale nadal nie zwalniają miejsca z użycia pamięci w aplikacji telefonu.

  • Próbowałem również analizować za pomocą profilera pamięci, ale nie jestem w stanie nic śledzić.

Przeszedłem także przez wszystkie posty i zaimplementowałem sugerowane rzeczy, ale GC.Collect() nie wydaje się zwalniać pamięci.

Czy są jakieś prace związane z następującym zagadnieniem. Jak mogę zwolnić zużycie pamięci podczas nawigacji z jednej strony na drugą?

+1

Jest mało prawdopodobne, że otrzymasz odpowiedź na ten temat. Spróbuj stworzyć minimalny program, który odtwarza błąd. Lub sięgnij głębiej za pomocą profilera. –

+0

Upewnij się, że używasz instrukcji "using" dla obiektów IDisposable. – Polyfun

+0

To dziwne, że problem nadal występuje po usunięciu obrazu, zazwyczaj jest to jedno z największych źródeł wycieków w systemie Windows Phone. Jak nawigujesz z jednej strony na drugą? Czy zawsze używasz 'NavigationService.Navigate' lub czasami używasz' NavigationService.GoBack'? Strona jest przechowywana w pamięci tak długo, jak jest w backstacku. –

Odpowiedz

3

Wygląda na to, że coś nie pozwala na recykling przedmiotów przez śmieciarek w jakimś cyklu. Może to być i zwykle jest spowodowane tym, że niektóre programy obsługi zdarzeń nie są usuwane, tym samym utrzymując obiekt przy życiu.

Jeśli masz jakieś zdarzenie na stronie lub w kodzie podglądu lub dowolny obiekt na stronie, usuń go (- =) w metodzie onNavigatedFrom przed wyjściem ze strony ... To może zrobić lewę i pamięć strony jest bezpłatny ....

+0

Dla informacji Josue Yeray, usuwam także programy obsługi zdarzeń w systemie OnNavigatedFrom i nadal pozostaje problem. Zużycie pamięci po prostu wzrasta, gdy przechodzę z jednego z powrotem do drugiego. – user2728319

+0

Jakieś rozwiązania? Wciąż mam do czynienia z następującym problemem – user2728319