2009-08-13 5 views
1

Я написал очень простое приложение для новичков с 6-гранным многогранником («ящик»), который поворачивается на 180 градусов, когда я нажимаю кнопку. и затем снова поворачивается на следующий щелчок. Каждый поворот захватывает еще 90 МБ, и он не отпускает, пока я не закрою приложение. Ящик определен в XAML. Storyboard, DoubleAnimation и PropertyPath и т. Д. Все создаются ONCE, в конструкторе. Код кнопки выглядит так:Утечка памяти в WPF

private void button_Storyboard1_Click(object sender, RoutedEventArgs e) 
    { 
     GC.Collect(); 

     if (_bFront) 
     { 
      _myDoubleAnimation.From = 0; 
      _myDoubleAnimation.To = 180; 
      _bFront = false; 
     } 
     else 
     { 
      _myDoubleAnimation.From = 180; 
      _myDoubleAnimation.To = 0; 
      _bFront = true; 
     } 
     _myDoubleAnimation.Duration = _Duration; 
     Storyboard.SetTargetName(_myDoubleAnimation, "rotate_me"); 
     Storyboard.SetTargetProperty(_myDoubleAnimation, _PropP); 
     _sb.Children.Add(_myDoubleAnimation); 
     _sb.Begin(this.viewport3D1); 
    } 

После нескольких поворотов у меня не хватает памяти! Что происходит?

+0

, пожалуйста, не могли бы вы рассказать мне, что такое карта gfx? –

ответ

1

Здесь может быть совершенно неправильно, но разве вы не добавляете _myDoubleAnimation в _sb.Children на каждом клике, а не просто обновляете его?

+0

Я думал об этом вчера вечером и пробовал делать _sb.Children.Clear(); перед добавлением() без эффекта. Я не вижу метод под названием «обновление» - что вы имеете в виду? (pardon me, я новичок wpf) Карточка gfx - это ATi Radeon X300, который говорит, что поддерживает DirectX 9.0 – 2009-08-13 13:26:04

+0

ah-HAA! Но ты был прав в любом случае! Когда я переместил Добавить в C'Tor (так что я только добавляю его один раз) изменения в анимации (To ... и From ...) по-прежнему распознаются, но больше не происходит утечек памяти! Спасибо !!! Я до сих пор не понимаю, почему _sb.Children.Clear() не помогло. – 2009-08-13 13:34:51

+0

Nop, звучит странно :) Я бы ожидал _sb.Children.Clear(), чтобы исправить утечку также :) – cwap

Смежные вопросы