WPF Choppy动画

时间:2010-06-03 20:56:32

标签: wpf performance animation windows-xp-sp3

WPF Windows-XP SP3

我遇到了一个简单的WPF动画问题。

我使用以下Xaml代码(在XamlPad中以及在WPF项目中):

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" >
    <Border Name="MyBorder" BorderThickness="10" BorderBrush="Blue" CornerRadius="10" Background="DarkRed" >
       <Rectangle Name="MyRectangle" Margin="10" StrokeDashArray="2.0,1.0" StrokeThickness="10" RadiusX="10" RadiusY="10" Stroke="Black" StrokeDashOffset="0">
           <Rectangle.Triggers>
               <EventTrigger RoutedEvent="Rectangle.Loaded">
                   <BeginStoryboard>
                       <Storyboard>
                           <DoubleAnimation Storyboard.TargetName="MyRectangle" Storyboard.TargetProperty="StrokeDashOffset" From="0.0" To="3.0" Duration="0:0:1" RepeatBehavior="Forever" Timeline.DesiredFrameRate="30" />
                       </Storyboard>
                   </BeginStoryboard>
               </EventTrigger>
           </Rectangle.Triggers>
       </Rectangle>
    </Border>
</Page>

它具有使边框围绕矩形设置动画的效果。重新启动机器后,此动画非常流畅。但是,我倾向于一直打开我的机器,经过一段时间后(我不知道有多长时间),动画开始出现口吃并变得不稳定。

我认为这可能是内存或资源问题,但在关闭所有其他应用程序和任何看似不必要的服务后,口吃仍然继续。但是,系统重启后,动画再次平滑!

我在WPF应用程序或XamlPad中遇到相同的症状。在应用程序的情况下,无论是在调试器中运行还是直接运行可执行文件,似乎没有任何区别。

我在这个链接上应用了补丁:http://support.microsoft.com/kb/981741我认为它已经解决了这个问题,但似乎没有。

我看过一些帖子可能表明使用透明度可能会影响动画,但正如您所见,我的xaml不使用透明度。

任何人都可以就如何确定问题给出一些建议吗?是否有可能有帮助的WPF诊断工具?

更新:我检查了我的视频驱动程序,它们是最新版本。 (nVidia GeForce 8400 GS)

4 个答案:

答案 0 :(得分:2)

运行动画一天多一点之后,虽然内存使用量有所增加,但我看不到任何真正可怕的事情。

我最终做的是在kaxaml上运行XP SP3上的示例,然后使用perfmon进行一些穷人的性能检查。

如果你以前没有使用过perfmon,那就去做Run - &gt;从开始菜单中选择。它可能会在列表中找到一些计数器,但如果您不想监视这些值,可以单击每个计数器并将其删除。我不认为你的情况下的CPU利用率是问题,但你可以保留它以防万一。

右键单击任意位置并选择“添加计数器”,然后在“性能对象”下选择“.NET CLR内存”。在右侧,选择感兴趣的可执行文件(在我的例子中,它是“Kaxaml”)。在左侧,选择“所有堆中的#字节”。我还会将采样率更改为更大的值,例如300秒,这样您就可以更好地了解在经历减速的时间段内的变化率。

这可能无法帮助您找到减速,但这是合理的第一步。也许你也应该下载ANTS 5分析器的试用版,看它是否有任何奇怪的东西。

答案 1 :(得分:1)

我让这个动画运行了30多个小时并没有减速或变得不稳定,但我正在运行Win 7.我让它在XP VM中运行了几个小时也运行良好。

我最好的猜测:视频驱动程序

理由:视频驱动程序是系统中最复杂的驱动程序,与计算机的整体性能有很大关系。虽然动画调度计时器可能落后,但除非你使用大量的CPU,否则它不太可能。

建议:

  • 检查驱动程序更新
  • 尝试使用其他视频卡(如果可能)
  • 破解PerfMon并抓住每个WPF&amp;可以使用DirectX计数器并随时监控

答案 2 :(得分:0)

我认为使用WPF会遇到效果不佳的机器。我在我的笔记本电脑上试过这个,很好。

答案 3 :(得分:0)

您是否打开任何互联网浏览器?我有一个类似的问题,我正在运行的动画,它是波涛汹涌的...没有什么真可怕的,它只是引人注目和讨厌,就像每隔半秒左右就会出现微型口吃......

在预感中,我关闭了谷歌浏览器,我已经打开了,口吃完全解决了。如果您在运行任何Web浏览器时打开它,请尝试关闭它们并查看它是否有帮助,它对我有用。