我在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 ++(可能)?