У меня есть киоск-приложение 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#
Место общения программистов C#
-
Anonymous
1737889719
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();
}
}));
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79388350/uwp-app-navigate-to-home-and-clear-frames[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия