Wpf 我如何找到什么';他正在使用我的应用程序中的所有CPU

Wpf 我如何找到什么';他正在使用我的应用程序中的所有CPU,wpf,performance,Wpf,Performance,我有一份WPF申请。大多数情况下,该应用程序几乎不使用CPU。这很好。但我有一个在特定情况下弹出的窗口。根据我在VisualStudio中运行的性能分析,我的代码没有使用太多CPU,Application.run方法是。其中大部分都在“Functon Body”中。大约占CPU的40-50% 我如何计算出什么在使用CPU?我有一些使用关键帧的动画,可以为一些东西的颜色设置动画。我想知道他们是不是在消耗CPU。我知道我可以暂时删除它们,而且我可能会删除,但是有没有其他方法可以准确地找出是什么在消耗

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

我如何计算出什么在使用CPU?我有一些使用关键帧的动画,可以为一些东西的颜色设置动画。我想知道他们是不是在消耗CPU。我知道我可以暂时删除它们,而且我可能会删除,但是有没有其他方法可以准确地找出是什么在消耗CPU

托尼

PS:为了向自己证明这是动画,我在TaskManager中观看了我程序的CPU使用情况。在显示带有动画的窗口之前大约是0。窗口显示&CPU启动了。然后我按下了一个按钮,改变了数据的状态&有停止动画的副作用。CPU返回到0。我重复了几次,结果一致。对我来说好像是动画。虽然有一种可能性,它是其他的东西,也正在进行的同时,动画

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

PS:如果有人感兴趣,我对WPF动画做了一些研究,发现WPF中至少有两种不同的彩色动画关键帧类。我正在使用的LinearColorKeyFrame,在动画的持续时间内,不断地改变颜色,从任何颜色变为您想要的颜色。另一个是离散颜色关键帧。这会立即将颜色从原来的颜色更改为您想要的颜色

因此,我根据以下内容编辑了我的动画:

<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。事实证明,DoubleAnimation占用了大部分CPU使用,它产生了发光效果。它几乎占用了1/2的CPU!根本不值得。即使我去掉了它,CPU的使用率仍然平均在15%左右。将其切换到离散帧使其下降到10%以下

还有另一个类似的动画,在同一窗口中的列表框中的项目周围设置边框动画。我做了同样的更改,现在CPU的使用是可以接受的。我不太清楚它是什么,但它比以前好多了


谢谢。

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

您需要进行代码分析,看看什么消耗了最多的CPU资源,也许可以这样调整


您可以阅读更多关于.NET评测的信息

grab ANTS performace profiler,它的前两周是免费的,比您需要的时间更长,这是一个很棒的工具