私は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使用率が許容範囲です。私はそれが何であるかを正確には分かっていないが、それはそれよりも優れている。
ありがとうございました。
グラブANTSの性能もプロファイラ、その自由な最初の2週間プロファイリング.NETについてもっと読むことができます - あなたがこれを理解するために必要以上の時間、素晴らしいツールを –