Wpf性能:减少使用动画时的滞后

时间:2018-03-12 20:50:30

标签: c# wpf performance-testing

我在Windows Presentation Foundation中有一些与性能问题相关的问题。我希望有关SO的专家可以帮助我一点。我是一名学生,总是乐于学习。不管怎样,让我们​​开始吧。

1•动画效果

在我的wpf应用程序中,我有很多用于不同目的的故事板。例如

将控件的颜色从白色更改为灰色

使用ColorAnimation

<Rectangle Fill="White">
 <Rectangle.Triggers>
   <EventTrigger RoutedEvent="MouseEnter">
     <BeginStoryboard>
       <Storyboard>
         <ColorAnimation Storyboard.TargetProperty="(Fill).Color" To="Gray" Duration="0:0:0.2"/>
       </Storyboard>
     </Beginstoryboard>
   </EventTrigger>
  </Rectangle.Triggers>
</Rectangle>

现在,当我运行我的应用程序时,它看起来很好,快速......嗯......精细。一旦我最大化窗口,问题就开始了。故事板开始滞后(不是上面的那个而是一个{ {1}})。我知道默认情况下,wpf会将刷新率设置为ThicknessAnimation。所以我将其最小化为60 FPS

10

现在我没有注意到与之前相同的延迟。但是仍有一些滞后。然后我遇到了MSDN论坛和其他SO qs并发现了这个:

  

可见性不可见的元素不参与输入事件(或命令),不影响布局的测量或排列过程,不在标签序列中,也不会在命中测试中报告。

阅读如此,一旦触发任何动画,我就会将许多控件的 Timeline.DesiredFrameRate="10" 设置为Visibility。完成代码后,我启动了我的应用程序。现在,性能可能是,很好,因为还有一些滞后但我不能确定它是否和以前一样。然后我遇到this。我意识到我使用Hidden的图像可能会导致这样的延迟,所以我将RenderOptions.BitmapScalingMode设置为BitmapScalingMode(AFAIK这是最低的渲染质量)。我推出了我的应用程序,但仍然面临一些滞后。滞后可能不是一个问题/头痛的问题一个普通的用户,但对于程序员(我不知道),这是不可接受的。

然后我继续浏览设计区域。我注意到我之前添加了很多标签和其他控件。我在网上看到NearestNeighbour有5个元素,而Label有1个。所以我用TextBlock替换了所有Label s.Still,我面临一些滞后。

我发布了 Word Outlook 以及其他 Microsoft 产品。他们似乎有动画,但我很难弄清楚这些是怎样的app跑得比我的顺畅吗?

再次浏览网页。发现如果我使用TextBlock s(如果/当我处理数据相关的东西时),那可能会支持性能 .So在MainWindow中,我为它添加了DataBinding并设置了dataBinding:

XAML

ListBox

C#

  <ListBox Name="lstbx1" HorizontalContentAlignment="Stretch">
                    <ListBox.ItemTemplate>
                            <DataTemplate>
                                    <Grid Margin="0,2">
                                            <Grid.ColumnDefinitions>
                                                    <ColumnDefinition Width="*" />
                                            </Grid.ColumnDefinitions>
                                            <TextBlock Text="{Binding Names}" />

                                    </Grid>
                            </DataTemplate>
                    </ListBox.ItemTemplate>
            </ListBox>

好,列表框没有问题。但是等等,我不应该检查动画.... !!再次他们让我失望。动画仍然很慢。我的笔记本电脑规格是:8 gb ram,4gb Intel HD Graphics 520,i5 6200U 2.3 ghz cpu ..我担心如果我的应用程序滞后于这台机器,如果一个可能会发生什么用户试图在低规格系统上运行它?

结论

这篇文章可能被投票结束,因为它可能过于宽泛但有人可以回答我的问题:是否有更有效的方法来摆脱这些滞后?像Office这样的大型软件如何拥有与我相同的动画但是没有滞后?是因为我使用的是c#而且正在使用c ++(可能)?

0 个答案:

没有答案