WPF中的内存泄漏
我写了一个非常简单的新手应用程序,有一个6面多面体(一个“盒子”),当我点击一个按钮时,它会旋转180度。然后在下一次单击时再次旋转。每次旋转都会占用另外90MB的空间,直到我关闭应用程序它才会释放。该框在XAML中定义。WPF中的内存泄漏,wpf,memory-leaks,3d,Wpf,Memory Leaks,3d,我写了一个非常简单的新手应用程序,有一个6面多面体(一个“盒子”),当我点击一个按钮时,它会旋转180度。然后在下一次单击时再次旋转。每次旋转都会占用另外90MB的空间,直到我关闭应用程序它才会释放。该框在XAML中定义。情节提要、双动画和属性路径等都在构造函数中创建一次。按钮代码如下所示: private void button_Storyboard1_Click(object sender, RoutedEventArgs e) { GC.Collect();
情节提要
、双动画
和属性路径
等都在构造函数中创建一次。按钮代码如下所示:
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);
}
转了几圈后,我的记忆就没有了!发生了什么事?这里可能完全错误,但是你不是在每次单击时都将“myDoubleAnimation”添加到“sb.Children”中,而不是仅仅更新它吗?这里可能完全错误,但你不是在每次单击时都将“myDoubleAnimation”添加到“sb.Children”中吗,与其只是更新它,不如告诉我这是什么gfx卡好吗?请告诉我这是什么gfx卡好吗?我昨天晚上想了想,试着做了些什么?孩子们,明白了吗;在Add()之前,没有任何效果。我没有看到一个叫做“更新”的方法——你是什么意思?(对不起,我是wpf新手)gfx卡是ATi Radeon X300,它说它支持DirectX 9.0ah-HAA!但无论如何,你是对的!当我将添加移动到C'Tor(因此我只添加一次)时,仍然可以识别动画的更改(到…和从…),但不再有内存泄漏!非常感谢。我仍然不明白为什么孩子们的清理没有帮助。不,听起来很奇怪:)我希望孩子们的清理也能修复漏洞:)我昨晚想了想,试着做孩子们的清理;在Add()之前,没有任何效果。我没有看到一个叫做“更新”的方法——你是什么意思?(对不起,我是wpf新手)gfx卡是ATi Radeon X300,它说它支持DirectX 9.0ah-HAA!但无论如何,你是对的!当我将添加移动到C'Tor(因此我只添加一次)时,仍然可以识别动画的更改(到…和从…),但不再有内存泄漏!非常感谢。我仍然不明白为什么_sb.Children.Clear()没有帮助。不,听起来很奇怪:)我希望_sb.Children.Clear()也能修复漏洞:)