2012-04-20 81 views
0

我有一个WPF应用程序。大多数情况下,该应用几乎不使用CPU。这很好。但是我有这个窗口在特定情况下弹出。根据我在Visual Studio中运行的性能分析,我的代码不使用大量的CPU,Application.Run方法是。其中大部分是在“Functon Body”中。调整到40-50%的CPU。如何找出我应用程序中所有CPU的使用情况

我该如何计算CPU的使用量?我有一些动画使用关键帧来动画某些事物的颜色。我想知道他们是否吃了CPU。我知道我可以暂时将它们删除,我可能会,但是还有另外一种方法可以确切知道什么是CPU?

托尼

PS:为了证明自己是动画,我看着我的任务管理器程序的CPU使用率。在带有动画的窗口显示之前,它大约为0。显示的窗口& CPU上升。然后我按了一个按钮,它改变了数据的状态&有停止动画的副作用。 CPU回落到0.我重复了几次,结果一致。看起来这是我的动画。虽然它有可能是与动画同时发生的其他事情。

动画是旨在模拟闪光灯的关键帧动画。我要转储关键帧动画,并使用计时器在两种颜色之间交换填充笔刷颜色。

PS:如果有人有兴趣,我做了一些研究,WPF动画,我发现至少有2个不同的颜色动画关键帧班WPF。我使用的是LinearColorKeyFrame,它可以随着颜色的变化而不断改变颜色,无论你想在动画的持续时间内如何。另一个是DiscreteColorKeyFrame。这立即改变颜色从任何它到任何你想要它。

所以我编辑从这个我的动画:

<Storyboard x:Key="FlashingStoryboard" AutoReverse="True" RepeatBehavior="Forever"> 
    <ColorAnimationUsingKeyFrames BeginTime="00:00:00" 
            Storyboard.TargetName="Flasher" 
            Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)"> 
     <LinearColorKeyFrame KeyTime="00:00:00.5" 
          Value="{Binding Path=FlashColor, RelativeSource={RelativeSource AncestorType={x:Type local:Flasher}}}"/> 
    </ColorAnimationUsingKeyFrames> 
    <DoubleAnimation Duration="00:00:00.5" 
        From="0" To="10" 
        Storyboard.TargetName="FlasherBlur" 
        Storyboard.TargetProperty="Radius"> 
    </DoubleAnimation> 
</Storyboard> 

要这样:

<Storyboard x:Key="FlashingStoryboard" AutoReverse="True" Duration="00:00:00.5" RepeatBehavior="Forever"> 
    <ColorAnimationUsingKeyFrames BeginTime="00:00:00" 
            Storyboard.TargetName="Flasher" 
            Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)"> 
     <DiscreteColorKeyFrame KeyTime="00:00:00.25" 
           Value="{Binding Path=FlashColor, RelativeSource={RelativeSource AncestorType={x:Type local:Flasher}}}" /> 
    </ColorAnimationUsingKeyFrames> 
</Storyboard> 

新的动画使用更少了大量的CPU。事实证明,大部分CPU使用率都被DoubleAnimation占用,而这正在产生发光效果。它用完了几乎1/2的CPU!根本不值得。即使我删除了它,CPU使用率仍然平均约为15%。将其切换到DiscreteKeyFrame将其降至10%以下。

还有一个,类似的动画在同一窗口的列表框动画项目周围的边框。我做了相同的更改,现在CPU使用率可以接受。我不完全确定它是什么,但它比它更好。

谢谢。

回答

2

是的,动画,是任何人都会告诉你的第一件事。还有多大?它不停止吗?然后是相当大的屏幕大块耶!

+0

抓蚂蚁服务表现探查,游离第2周 – 2012-04-20 18:52:07

0

您需要执行代码分析并查看哪些消耗了大部分CPU资源,并且可能调整了这种方式。比你需要弄清楚这一点,伟大的工具,更多的时间 -

你可以阅读更多有关.NET分析here

相关问题