如何找出我的应用程序中使用所有CPU的内容

时间:2012-04-20 18:46:34

标签: wpf performance

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

我如何弄清楚CPU耗尽了什么?我有一些动画使用关键帧来动画某些东西的颜色。我想知道他们是不是正在吃掉CPU。我知道我可以暂时删除它们,我可能会这样做,但还有另一种方法可以确切地知道CPU正在吃什么吗?

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

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

PS:如果有人有兴趣,我对WPF动画做了一些研究,我发现WPF中至少有2个不同的Color Animation KeyFrame类。我正在使用的那个,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占用,这产生了一种发光效果。它耗尽了近一半的CPU!根本不值得。即使我删除了它,CPU使用率仍然平均约为15%。将它切换到DiscreteKeyFrame使其降低到10%以下。

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

感谢。

2 个答案:

答案 0 :(得分:2)

是的,动画,是任何人都会告诉你的第一件事。还有多大?它不停吗?屏幕相对较大的部分是啊!

答案 1 :(得分:0)

您需要进行代码分析,看看什么消耗了大部分CPU资源,并且可能会调整这种方式。

您可以阅读有关.NET分析here

的更多信息
相关问题