9

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 诊断工具可能有所帮助?

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

4

4 回答 4

2

在运行你的动画一天多一点之后,我没有看到任何非常糟糕的事情发生,尽管内存使用量增加了一点。

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

如果您以前没有使用过 perfmon,只需从开始菜单执行 Run -> perfmon。它可能会在列表中提供一些计数器,但如果您不想监视这些值,可以单击每个计数器并删除它们。我认为您的 CPU 利用率不是问题,但您可以将其保留以防万一。

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

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

于 2010-06-10T13:11:13.120 回答
1

我已经让动画运行了 30 多个小时,它并没有变慢或变得不稳定,但我运行的是 Win 7。我让它在 XP VM 中运行了几个小时,它运行良好。

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

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

建议:

  • 检查驱动程序更新
  • 尝试不同的视频卡(如果可能)
  • 破解打开 PerfMon 并获取每个可能的 WPF 和 DirectX 计数器并随着时间的推移进行监控
于 2010-06-10T15:16:41.163 回答
0

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

于 2010-06-10T05:19:17.527 回答
0

您是否打开了任何互联网浏览器?我在运行的动画中遇到了类似的问题,它断断续续......没什么可怕的,它只是引人注目和烦人,就像它每半秒左右就会出现微小的口吃......

On a hunch I closed out of Google Chrome that I had open and the stuttering completely resolved. If you have any web browsers open while running it try closing them out and see if it helps, it worked for me.

于 2016-08-23T03:02:43.240 回答