Приложение UWP перейти к дому и очистить рамкиC#

Место общения программистов C#
Anonymous
 Приложение UWP перейти к дому и очистить рамки

Сообщение Anonymous »

У меня есть приложение для киосков UWP, которое протекает память. Когда я смотрю на его работу в диспетчере задач, я вижу, как потребление памяти увеличивается по мере того, как страницы приложения ориентируются. Эта навигация выполняется в основном без вмешательства человека и инициируется через отдельную систему, отвечающую событиям в окружающей среде, например, автомобиль, проезжающий мимо датчика. Сам вернулся на стартовую страницу. Я вижу, что по мере того, как он навигает на обратный удар, и никогда не сбрасывается, поэтому я предполагаю (и от чтения других, таких как этот, как этот), что это причина утечки. Я никогда не вызываю frame.goback ();
Я использую этот простой метод для навигации по приложению:
public async Task NavigateTo(Type kioskPage)
{
try
{
if (Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.HasThreadAccess)
{
Frame.Navigate(kioskPage, KioskModel);
}
else
{
await Task.Run(() => Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
() =>
{
Frame.Navigate(kioskPage, KioskModel);
}));
}
}
catch (Exception ex)
{
//maybe a race condition
Task.Delay(500).Wait();
try
{
await Task.Run(() => Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
() =>
{
Frame.Navigate(kioskPage, KioskModel);
}));
}
catch (Exception ex2)
{
HandleError(ex2, TrackedEventSources.Code, false, "Double thread exception", true, "NavigateTo");
}
}
}
< /code>
Итак, если я хочу перейти обратно на начальный экран, я просто вызову: < /p>
await NavigateTo(typeof(MainView), aModel);
< /code>
Это работает, будь то в основном потоке или на фоне. Сброс до 0? Или что -то я делаю не так с точки зрения того, как я навигации? < /P>
Я могу позвонить: < /p>
Frame.BackStatck.Clear();
< /code>
Но это не освобождает память. может означать, что это не кадры, которые являются проблемой): < /p>
public void NavigateToHome()
{

if (Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.HasThreadAccess)
{
while (Frame.CanGoBack)
{
Frame.GoBack();
}
}
else
{
Task.Run(() => Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
() =>
{
while (Frame.CanGoBack)
{
Frame.GoBack();
}
}));
}
}


Подробнее здесь: https://stackoverflow.com/questions/793 ... ear-frames

Вернуться в «C#»