Память не падает, когда я нажимаю GoBack - PullRequest
0 голосов
/ 03 октября 2011

Когда GoBack я вызываю функцию Dispose () в

 private void Dispose()
    {


        ImageBrush brushRoot = LayoutRoot.Background as ImageBrush;
        if (brushRoot != null)
        {
            ((BitmapImage)brushRoot.ImageSource).UriSource = null;
            brushRoot.ImageSource = null;
            LayoutRoot.Background = null;
        }

        gridHeader_hotNews.Children.Clear();
        gridHeader_hotNews = null;

        if (grid_Two.Background as ImageBrush != null)
        {
            ((BitmapImage)(grid_Two.Background as ImageBrush).ImageSource).UriSource = null;
            (grid_Two.Background as ImageBrush).ImageSource = null;
            grid_Two.Background = null;
        }
        if (btn_Two.Background as ImageBrush != null)
        {
            ((BitmapImage)(btn_Two.Background as ImageBrush).ImageSource).UriSource = null;
            (btn_Two.Background as ImageBrush).ImageSource = null;
            btn_Two.Click -= new RoutedEventHandler(btn_Two_Click);
            btn_Two.Background = null;
        }
        btn_Two = null;
        grid_Two.Children.Clear();
        grid_Two = null;

        grid_Content.Children.Clear();
        grid_Content = null;

        if (grid_footer.Background as ImageBrush != null)
        {
            ((BitmapImage)(grid_footer.Background as ImageBrush).ImageSource).UriSource = null;
            (grid_footer.Background as ImageBrush).ImageSource = null;
            grid_footer.Background = null;
        }
        if (btnspeaker.Background as ImageBrush != null)
        {
            ((BitmapImage)(btnspeaker.Background as ImageBrush).ImageSource).UriSource = null;
            (btnspeaker.Background as ImageBrush).ImageSource = null;
            btnspeaker.Background = null;
        }
        btnspeaker = null;

        grid_footer.Children.Clear();
        grid_footer = null;
        LayoutRoot.Children.Clear();
        LayoutRoot = null;
        GC.SuppressFinalize(this);
        GC.WaitForPendingFinalizers();
    }

, но все еще использует от 3 до 5 МБ.Как восстановить исходную память, когда я вызываю событие GoBack?

Пожалуйста, помогите мне, я хочу освободить память, когда я вернусь или удаляю объект.

1 Ответ

2 голосов
/ 03 февраля 2012

Сборщик мусора запускается только тогда, когда он требуется для запуска, поэтому он не обязательно будет запускаться сразу после запуска Dispose.

Вы можете принудительно собрать GC, вызвав GC.Collect ();но это, вероятно, повлияет на производительность ваших приложений.Это потому, что когда GC запускается, он останавливает все выполняющиеся потоки в вашем приложении и проверяет каждый объект в куче, чтобы увидеть, на него все еще ссылаются или используют.В то время как сборщик мусора работает быстро, будет много лишних вызовов к GC.

Как говорили другие комментирующие люди, лучше всего позволить GC управлять собой.

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