Приложение 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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