使用情节提要为转换属性设置动画时,性能较差

时间:2018-09-07 13:25:56

标签: c# .net wpf storyboard translate-animation

在WPF应用程序中,我有一个背景图像,我想通过缓慢调整其X位置(特别是通过增加图像的平移变换的X属性来对其进行动画处理)

起初,我在XAML中使用了一个故事板,如下所示:

<Grid Grid.Row="1" Panel.ZIndex="-1">
        <Grid.Triggers>
            <EventTrigger RoutedEvent="Loaded">
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation Storyboard.TargetName="backgroundTransform" Storyboard.TargetProperty="X"
                                         From="1" To="0" Duration="0:0:45" RepeatBehavior="Forever" Timeline.DesiredFrameRate="30"/>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </Grid.Triggers>
        <Grid.Background>
            <ImageBrush ImageSource="../ocean.jpg" TileMode="FlipXY" Stretch="UniformToFill">
                <ImageBrush.RelativeTransform>
                    <TransformGroup>
                        <TranslateTransform X="0" x:Name="backgroundTransform"/>
                    </TransformGroup>
                </ImageBrush.RelativeTransform>
            </ImageBrush>
        </Grid.Background>
    </Grid>

此方法有效,但是却导致性能严重下降,CPU使用率为14%,GPU使用率为14%。因此,我尝试使用计时器手动进行操作:

System.Windows.Threading.DispatcherTimer timer2 = new System.Windows.Threading.DispatcherTimer();
timer2.Tick += new EventHandler(OceanTranslate);
timer2.Interval = new TimeSpan(0, 0, 0, 0, 1000/60);

...

private void OceanTranslate(Object _object, EventArgs _eventArgs)
    {
        imageOffset += 1.0 / (30.0*45.0);
        backgroundTransform.X = imageOffset;
    }

这效率更高,CPU使用率为4%,GPU使用为10%。

我的问题是故事板方法为什么这么慢,我可以做些什么来改进它?因为如果可能的话,我想使用纯XAML,因为这都是视觉效果。

0 个答案:

没有答案