Mam aplikację UWP dla systemu Windows 10 i zauważyłem, że wykorzystanie pamięci w menedżerze zadań rośnie z czasem.UWP Windows 10 Pamięć aplikacji zwiększająca się podczas nawigacji
Odebrałem aplikację i stwierdziłem, że pamięć zwiększa się podczas nawigacji stron. Stworzyłem więc prostą aplikację z kilkoma stronami do przetestowania, a pamięć wciąż rośnie w tej prostej aplikacji. Mam stronę główną, która porusza się po ramce od strony Strona1 do strony2 iz powrotem na zegar.
public sealed partial class MainPage : Page
{
private DispatcherTimer _timer;
private bool _page1Showing;
private bool _timerRunning;
public MainPage()
{
this.InitializeComponent();
_timer = new DispatcherTimer();
_timer.Interval = new TimeSpan(0, 0, 0, 0, 200);
_timer.Tick += _timer_Tick;
}
private void _timer_Tick(object sender, object e)
{
GC.Collect();
this.rootFrame.BackStack.Clear();
this.rootFrame.ForwardStack.Clear();
if (_page1Showing)
{
this.rootFrame.Navigate(typeof(Page2));
_page1Showing = false;
}
else
{
this.rootFrame.Navigate(typeof(Page1));
_page1Showing = true;
}
}
private void Button_Click(object sender, RoutedEventArgs e)
{
if (_timerRunning)
{
_timer.Stop();
_timerRunning = false;
}
else
{
_timer.Start();
_timerRunning = true;
}
}
}
Page1 i Strona2 to puste strony z siatką z kolorem tła, dzięki czemu można wyświetlić nawigację. Podczas tej aplikacji zużycie pamięci w Menedżerze zadań wzrasta o około 1 MB co 30 minut.
mam uruchomić aplikację za pomocą diagnostyki pamięci w VS2015 zarządzanej stercie jest zgodnie z oczekiwaniami:
stosie jest zawsze rośnie:
Porównywanie migawek Sterty pokazuje:
Jestem zdezorientowany czym są te obiekty McgInteropa? i dlaczego tak prosta aplikacja zawsze zwiększa wykorzystanie pamięci. Moja główna aplikacja musi działać przez długi czas (miesiące +). Doceniam każdą pomoc.
Próbowałem zmienić strony NavigationCacheMode, jeśli jest ustawione na Wymagane strony są tworzone tylko raz. Jeśli ustawione jest wyłączone, Strony są tworzone za każdym razem, a ja sprawdziłem, czy finalizator jest wywoływany zgodnie z oczekiwaniami.
-
Edit: Dodałem przycisk, aby uruchomić lub zatrzymać stoper (zaktualizowane wyżej). Wygląda na to, że podczas pracy licznika zużycie pamięci w Menedżerze zadań wzrośnie, gdy licznik zostanie zatrzymany, zużycie pamięci ostatecznie spada.
I mierzono zużycia pamięci w menadżera zadanie od dnia rozpoczęcia i zatrzymanie licznika czasu, około co 2 godziny w następujący powoli wzrasta, a następnie spada w pewnym punkcie:
12,5 -> 17,1 -> 16,7 -> 13,9 -> 16,8 -> 22,5 -> 13,6 -> 14,6 -> 24,9 -> 15,2
Zgaduję, że wszystko działa dobrze? Ale nie wiem, co się tutaj dzieje, dlaczego tak bardzo się zwiększa? Kiedy jest on wolny w jakich warunkach?
Czy system opóźnia zwolnienie pamięci podczas nawigacji stron? kiedy użytkownik zwykle wchodzi w interakcję z ekranem?
** Ramka ** zachowuje historię nawigacji. Czy to się zdarza, kiedy raz na jakiś czas usuniesz backstack? –
Zaktualizowałem powyższy kod, aby wyczyścić backstack, pamięć wciąż rośnie w Menedżerze zadań, tak jak poprzednio. – tagy22
Gdy pojawi się rozwiązanie, podziel się nim w samodzielnej odpowiedzi. Ludzie w odpowiedziach poniżej (usunięci) pytają o to. Dzięki – Drew