2012-04-20 32 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

相關問題