AvalonDock DocumentContent не сборщик мусора

Я создал приложение, использующее фреймворк AvalonDock. Ключевой частью является возможность редактировать объекты модели предметной области с помощью редакторов, производных от AvalonDock.DocumentContent . Я столкнулся с проблемой и обнаружил, что мои редакторы не собирают мусор после того, как они закрываются и удаляются из коллекции DockingManager.Documents .

После бесплодных поисков я создал небольшое тестовое приложение, которое можно воссоздан следующим образом:

  • В Visual Studio (я использую 2008) создайте новое приложение WPF с именем AvalonDockLeak ;
  • Добавьте ссылку на библиотеку AvalonDock (моя версия - 1.3. 3571.0);
  • Добавьте новый элемент управления UserControl под названием Document ;
  • Измените Document.xmal на:

     
      <Сетка>
      
      
     
     
  • Измените Document.xmal.cs на:

     пространство имен AvalonDockLeak
     {
      используя AvalonDock;
    
      общедоступный частичный класс Document: DocumentContent
      {
      публичный документ ()
      {
      InitializeComponent ();
      }
    
      ~ Документ ()
      {
      }
      }
     }
     

    Деструктор, который я добавил, чтобы иметь возможность диагностировать проблему, добавляя точку останова в методах, открывающих {, и проверяя, сработает ли она. Это всегда происходит при закрытии тестового приложения, но не раньше.

  • Теперь измените Window1.xaml на:

     
      <Сетка>
      
      
      
      
      
  • Измените Window1.xaml.cs на:

     пространство имен AvalonDockLeak
     {
      используя System.Windows;
    
      общедоступный частичный класс Window1: Window
      {
      частный счетчик int = 0;
    
      общедоступное Window1 ()
      {
      InitializeComponent ();
      }
    
      private void NewButton_Click (отправитель объекта, RoutedEventArgs e)
      {
      строка name = "Document" + (++ this.counter) .ToString ();
      var document = новый документ ()
      {
      Имя = имя,
      Заголовок = имя,
      IsFloatingAllowed = false
      };document.Show (this.DockManager);
      document.Activate ();
      }
      }
     }
     

Это простое приложение также содержит утечку. Это можно увидеть по точке останова на открытии ~ Document () {не происходит попадания после закрытия DocumentContent .

Теперь я хочу узнать, известно ли это проблема и есть ли способ ее предотвратить? Если объекты собираются мусором только спустя долгое время, что я могу сделать, чтобы ускорить это? Кстати, вызов GC.Collect () не помогает.

8
задан Wietze 15 July 2011 в 09:55
поделиться