Утечка памяти Silverlight ChildWindow - PullRequest
3 голосов
/ 17 мая 2010

Кто-нибудь знает, как устранить утечку памяти в SL3 с помощью ChildWindow?

См. Фрагмент кода ниже:

 private void Button_Click(object sender, RoutedEventArgs e)
    {
        var window = new ChildWindow();

        window.Closed += new EventHandler(window_Closed);

        window.Show();
    }

    void window_Closed(object sender, EventArgs e)
    {
        ((ChildWindow)sender).Closed -= new EventHandler(window_Closed);

        WeakReference reference = new WeakReference(sender);

        GC.Collect();

        GC.WaitForPendingFinalizers();

        bool isControlAlive = a.IsAlive;
    }

Он всегда отображается как «живой» - и когда я отслеживаю экземпляр iexplore в диспетчере задач - память продолжает увеличиваться при каждом открытии и закрытии дочернего окна.

Пожалуйста, помогите.

Спасибо.

Chris

1 Ответ

4 голосов
/ 17 мая 2010

Насколько я знаю, официального исправления пока нет. Эта страница описывает характер утечки памяти:

... [ChildWindow] подписывается на RootVisual_GotFocus несколько раз, но отменяет его только один раз при закрытии. Это заставляет ChildWindow постоянно оставаться в памяти, присоединенной к событию GotFocus RootVisual.

В разделе комментариев вы можете изменить код Silverlight Toolkit следующим образом, чтобы решить проблему:

Измените функцию ChildWindow_LostFocus в ChildWindow.cs (строка 731), чтобы вычесть слушателя RootVisual_GotFocus перед тем, как снова добавить:

Application.Current.RootVisual.GotFocus -= this.RootVisual_GotFocus;
Application.Current.RootVisual.GotFocus += this.RootVisual_GotFocus;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...