可怕的WPF表现!

时间:2010-04-08 18:39:07

标签: wpf performance

为什么我只是在悬停某些链接时使用超过80%的CPU? 正如您在上传的视频中看到的那样:http://www.youtube.com/watch?v=3ALF9NquTRE 当我将鼠标移到链接上时,CPU会转到> 80%的CPU。

我的项目风格如下

    <Style x:Key="LinkStyle" TargetType="{x:Type Hyperlink}">
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="Foreground" Value="White" />
            </Trigger>
        </Style.Triggers>
        <Setter Property="TextBlock.TextDecorations" Value="{x:Null}" />
        <Setter Property="Foreground" Value="#FFDDDDDD"/>
        <Setter Property="Cursor" Value="Arrow" />
    </Style>    

为什么?

3 个答案:

答案 0 :(得分:1)

无需怀疑 - use XPerf and find out。 PDC09给出的video on the topic非常好,您可以快速启动并运行。

答案 1 :(得分:1)

我的应用程序中的样式有类似的问题。看不到UI的整个xaml文件,我会问你是否使用任何Bitmap效果,因为这会导致CPU性能上升的问题。如果您是,我建议不要使用它们,而是使用优化的效果选项或使用WPF中的着色器库支持来应用您正在寻找的任何效果。

在我的例子中,我有一个带有阴影位图效果的元素,并且能够将其切换到阴影效果,获得了所需的效果并且CPU没有被击中。当我有位图效果时,它实际上是重绘了效果所在的整个矩形区域,所以当我有一个闪烁的光标时,它将重绘每个子控件,并在其中应用了位图效果。

如果您没有使用任何效果,我建议您查看您的可视化树,看看它是否含有很多UI元素,或者最后有时最常查看,请检查您可能已定义的触发器和/或事件正在显示的超链接类型的过度状态可能是一些悬而未决的问题。

答案 2 :(得分:0)

超链接是你自己的类型,对吧?

我尝试将你的风格应用到TextBlock而不能让CPU超过5%,所以当其中一个属性发生变化时,Hyperlink内部可能会发生一些事情。尝试隔离导致CPU出现峰值的属性。