2009-08-13 3 views
1

버튼을 클릭 할 때 180도 회전하는 6 면체 ("상자")가있는 매우 간단한 초보자 앱을 작성했습니다. 다음 클릭시 다시 회전합니다. 모든 회전은 90MB를 더 차지하며 앱을 종료 할 때까지 기다리지 않습니다. 이 상자는 XAML에 정의되어 있습니다. Storyboard, DoubleAnimationPropertyPath 등은 모두 생성자에서 한 번만 만들어집니다. 버튼 코드는 다음과 같습니다.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

여기에서 완전히 틀릴 수도 있지만 각 클릭에 대해 _sb.Children에 _myDoubleAnimation을 추가하는 대신 업데이트하는 대신에?

+0

어젯밤에 대해 생각해 봤는데 _sb.Children.Clear(); Add() 전에 효과가없는 . 나는 'update'라는 메서드를 보지 못했습니다 - 무슨 뜻입니까? (실례합니다, wpf 초보자입니다.) gfx 카드는 DirectX 9.0 –

+0

ah-HAA를 지원하는 ATi Radeon X300입니다! 하지만 네가 옳았 어! C'Tor에 Add를 옮겼을 때 (그래서 한 번만 추가합니다) 애니메이션 (To ...와 From ...)의 변경은 여전히 ​​인식되지만 더 이상 메모리 누수가 없습니다! 감사합니다. !!! _sb.Children.Clear()가 도움이되지 않은 이유는 아직도 이해할 수 없습니다. –

+0

Nop, 이상하게 들리네. _sb.Children.Clear()도 누출 문제를 해결할 것으로 기대합니다. :) – cwap