C# WPF动画CPU使用异常

axzmvihb  于 2023-10-22  发布在  C#
关注(0)|答案(3)|浏览(153)

我正在开发WPF应用程序,客户端报告CPU使用率极高(90%)(而我无法重复这种行为)。我追踪到了这几行。这是简单的发光动画小单led控制( Flink 的led)。是什么原因导致这个简单的动画占用如此巨大的CPU资源?

<Trigger Property="State"> 
            <Trigger.Value> 
                <local:BlinkingLedStatus>Blinking</local:BlinkingLedStatus> 
            </Trigger.Value> 
            <Trigger.EnterActions> 
                <BeginStoryboard Name="beginStoryBoard"> 
                    <Storyboard> 
                        <DoubleAnimation Storyboard.TargetName="glow" Storyboard.TargetProperty="Opacity" AutoReverse="True" From="0.0" To="1.0" Duration="0:0:0.5" RepeatBehavior="Forever"/> 
                    </Storyboard> 
                </BeginStoryboard> 
            </Trigger.EnterActions> 
            <Trigger.ExitActions> 
                <StopStoryboard BeginStoryboardName="beginStoryBoard"/> 
            </Trigger.ExitActions> 
        </Trigger>
nwlls2ji

nwlls2ji1#

WPF的动画和效果是计算密集型的。它们需要硬件加速才能顺利工作。这意味着它需要一个像样的显卡才能玩得很好。
您可以检查您的应用是否可以使用硬件加速as described here,如果不能,则移除光晕效果。
(Or只是使其简单化,例如添加一个简单白色矩形来代替它,或类似的东西。)
我曾经写过一个简单的应用程序,广泛使用各种效果和动画,它几乎不能在普通机器上使用。我简化了效果,一切都变得顺利。

06odsfpq

06odsfpq2#

可能不是触发器的错误,实际效果,尝试删除所有效果以降低CPU

a64a0gku

a64a0gku3#

很可能您的客户端没有硬件加速。今天(甚至昨天)的显卡应该足以渲染WPF。告诉他更新他的显卡驱动。您还可以通过在StoryBoard上设置Timeline.DesiredFrameRate="20"(或更低,如果适合您)来调整动画。

相关问题