【问题标题】:C# WPF abnormal CPU usage for animationC# WPF 动画 CPU 使用异常
【发布时间】:2011-01-15 07:46:56
【问题描述】:

我正在开发 WPF 应用程序,客户端报告 CPU 使用率极高 (90%)(而我无法重复该行为)。我已经将 bootleneck 追溯到这些行。它是用于小型单个 LED 控制(闪烁 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> 

【问题讨论】:

    标签: c# wpf animation cpu-usage


    【解决方案1】:

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

    【讨论】:

    • 我试过了,但使用量只是一点点减少!问题是,这个组件非常小(50x50 像素)。他报告说,即使 fps 30,cpu 使用率仍然是 70%。对于blinkig 50x50 的正方形来说,这简直是太多了……:/
    • 您是否检查了 GPU 硬件(及其驱动程序)?
    【解决方案2】:

    WPF 的动画和效果是计算密集型的。它们需要硬件加速才能顺利工作。这意味着它需要一个像样的显卡才能玩得很好。

    您可以检查您的应用是否可以使用硬件加速as described here,如果不可以,则移除发光效果。
    (或者只是将其简化,例如添加一个简单的白色矩形而不是它,或类似的东西。)

    我曾经写过一个简单的应用程序,它广泛使用了各种效果和动画,但在普通机器上几乎无法使用。我把效果调低了,一切都变得顺利了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-09
      • 1970-01-01
      • 2011-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多