Утечка памяти при навигации?

#windows-phone-7 #memory-leaks

#windows-phone-7 #утечки памяти

Вопрос:

Я создал простое приложение wp7, которое содержит 2 страницы с кнопкой и изображением на ней (и 2 бессмысленных переключателя).:

 <!--ContentPanel - place additional content here-->
    <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
        <RadioButton Content="RadioButton" Height="80" Name="radioButton1" VerticalAlignment="Top" Margin="0,0,268,0" />
        <RadioButton Content="RadioButton" Height="80" HorizontalAlignment="Left" Margin="231,0,0,0" Name="radioButton2" VerticalAlignment="Top" Width="204" />
        <Button Content="Button" Height="97" HorizontalAlignment="Left" Margin="137,510,0,0" Name="button1" VerticalAlignment="Top" Width="331" Click="button1_Click"/>
        <Image Height="418" HorizontalAlignment="Left" Margin="12,86,0,0" Name="image1" Stretch="Fill" VerticalAlignment="Top" Width="444" Source="http://brucew.files.wordpress.com/2011/10/stones-some-girls.jpg"/>
    </Grid>
  

И когда я перемещаюсь туда и обратно, потребление памяти увеличивается до 30-35.
Я постоянно возвращаюсь с помощью кнопки «Назад».

Теперь я боюсь, что более сложное приложение с выбором изображений, bingmaps и примерно 10 другими страницами довольно легко преодолеет барьер в 90 мегабайт.

Итак, мой вопрос в том, почему это происходит с моим тестовым приложением, это то, о чем я должен беспокоиться?

Ответ №1:

Каждый раз, когда вы переходите на вторую страницу, создается новый экземпляр. На первой странице будет только один экземпляр, поскольку это точка входа в приложение. После возврата со второй страницы этот экземпляр становится потерянным и, следовательно, подлежит сборке мусора. Однако экземпляр не будет собран немедленно, вместо этого он будет освобожден при следующем запуске сборки мусора (или, возможно, при последующем запуске, в зависимости от использования памяти вашим приложением).

Я думаю, вы обнаружите, что использование памяти не увеличится, пока у вас не будет большого количества объектов, которые фактически все еще используются. Использование, которое вы видите здесь, связано с большим количеством объектов, память которых при необходимости можно восстановить.