2012-04-20 7 views
0

私はWPFアプリケーションを持っています。ほとんどの場合、アプリはほとんどCPUを使用していません。これはいい。しかし、私は特定の状況下でポップアップするこの1つのウィンドウを持っています。 Visual Studioで実行したパフォーマンス分析によれば、私のコードはCPUを大量に使用していないため、Application.Runメソッドがあります。そしてそのほとんどは "Functon Body"です。 CPUの40〜50%のような曲に。アプリケーション内のすべてのCPUをどのように使用しているのかを知るには

どのようにCPUを使い果たしているのか分かりますか?私はいくつかのものの色をアニメーション化するキーフレームを使用していくつかのアニメーションを持っています。彼らがCPUを食べているのかどうか疑問に思います。私はそれらを一時的に取り除くことができると知っていますが、私はそうかもしれませんが、CPUを食べるものを正確に把握する別の方法はありますか?

トニー

PS:それはアニメーションだった自分自身に証明するために、私は、タスクマネージャで私のプログラムのCPU使用率を見ました。アニメーションのあるウィンドウが表示される前は約0でした。ウィンドウには&と表示され、CPUがアップしました。私はその後、データの状態を変更するボタンを押した&は、アニメーションを停止する副作用があります。 CPUは0に戻りました。これを数回繰り返し、一貫した結果を得ました。それは私のアニメーションのように見えます。それがアニメーションと同時に起こっている別のものである可能性もありますが。

アニメーションは、点滅する光をシミュレートするためのキーフレームアニメーションです。キーフレームのアニメーションをダンプし、タイマーを使用して塗りつぶしブラシの色を2つの色に入れ替えます。

PS:興味があれば、私はWPFアニメーションについて少し研究しましたが、WPFには少なくとも2種類のColor Animation KeyFrameクラスがあることがわかりました。私が使用していたもの、LinearColorKeyFrameは、アニメーションの長さにかかわらず、どんなものであっても、色を常に変化させます。もう1つは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のほぼ1/2を使い果たしました!それはまったく価値がない。私がそれを取り除いても、CPU使用率は平均約15%でした。それをDiscreteKeyFrameに切り替えると、10%以下になりました。

同じウィンドウ内のListBox内のアイテムの周りにアニメーションを適用したもう1つの類似したアニメーションがありました。私は同じ変更を加えましたが、現在はCPU使用率が許容範囲です。私はそれが何であるかを正確には分かっていないが、それはそれよりも優れている。

ありがとうございました。

答えて

2

アニメは、誰もがあなたに教えてくれる最初のものです。またそれはどれくらい大きいの?それはノンストップですか?画面の比較的大きな塊、次にええ!

+0

グラブANTSの性能もプロファイラ、その自由な最初の2週間プロファイリング.NETについてもっと読むことができます - あなたがこれを理解するために必要以上の時間、素晴らしいツールを –

0

コードプロファイリングを行う必要があります。ほとんどのCPUリソースを消費し、それを調整する必要があります。

あなたはhere

関連する問題