Утечка памяти Windows Phone 90MB - только две статические страницы - PullRequest
4 голосов
/ 20 марта 2012

Я создал две (как можно более простые) страницы .XAML.

StaticPage.xaml

  1. Показывает использование памяти
  2. Ссылки на MemoryTest.xaml

MemoryTest.xaml

  1. Ничего не делает, кроме отображения 10 или около того текстовых блоков каждый с текстом = "Это некоторыеtext ".

ПРОБЛЕМА

Если все, что вы делаете, это переходите назад и вперед между страницами, используя гиперссылку, а затем аппаратную кнопку, использование памяти выглядитхорошо.но если вы продолжаете делать это снова и снова ... ОБА текущее использование памяти, и общее использование памяти поднимается !!!!!до предела 90 МБ.

Посмотреть мой скриншот здесь:
enter image description here

Примечание:

Более быстрая навигация или замедление делаетне имеет значения.Нет ресурсов для освобождения, нет ничего, что можно было бы сделать в коде, потому что там ничего нет ... Теперь, если вы добавите больше элементов управления (как в обычном приложении, этот процесс ускорится).Добавление большего количества статических текстовых блоков также увеличивает скорость достижения предела в 90 МБ.

Это плохо, потому что у меня есть страница фотоальбома, которая использует память, которая не освобождается, и через 5 минут или при нормальном использовании она превышает 90 МБ... Мне нужно попытаться решить эту проблему, чтобы она не прошла проверку на рынке.

Вот код для каждой страницы

StaticPage.xaml

public partial class staticPage : PhoneApplicationPage
{
    public staticPage()
    {
        InitializeComponent();
    }

    private void HyperlinkButton_Click(object sender, RoutedEventArgs e)
    {
        NavigationService.Navigate(new Uri("/TestDir/MemTest.xaml", UriKind.Relative));
        txtMem.Text = String.Format("{0} MB Peak\n{1} MB Current", (DeviceStatus.ApplicationPeakMemoryUsage / 1048576).ToString(), (DeviceStatus.ApplicationCurrentMemoryUsage / 1048576).ToString());
    }
}

MemoryTest.xaml

public partial class MemTest : PhoneApplicationPage
{
    public MemTest()
    {
        InitializeComponent();
    }
}

1 Ответ

3 голосов
/ 21 марта 2012
  • Не беспокойтесь о проверке потребления памяти в эмуляторе, это не точно.Используйте устройство.

  • Не выполняйте преждевременную оптимизацию

  • Когда вы пишете реальное приложение, профилируйте его.

  • Отладочные сборки потребляют больше памяти, и использование памяти будет уменьшаться после навигации, когда / если включится GC.

  • Не использовать GC.Collect().Только не надо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...