У меня есть киоск-приложение 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
Приложение UWP. Перейдите на главную страницу и очистите рамки. ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Перейдите на следующую страницу, очистите данные и вернитесь на первую страницу.
Anonymous » » в форуме Python - 0 Ответы
- 25 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Перейдите на следующую страницу, очистите данные и вернитесь на первую страницу.
Anonymous » » в форуме Python - 0 Ответы
- 40 Просмотры
-
Последнее сообщение Anonymous
-
-
-
UWP xamarin формирует главную страницу, которая не инициализируется должным образом
Anonymous » » в форуме C# - 0 Ответы
- 59 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Веб-приложение C# .NET8: как я могу направить «плохие» URL-адреса на главную страницу?
Anonymous » » в форуме C# - 0 Ответы
- 14 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Веб-приложение C# .NET8: как я могу направить «плохие» URL-адреса на главную страницу?
Anonymous » » в форуме C# - 0 Ответы
- 14 Просмотры
-
Последнее сообщение Anonymous
-