私はWPFアプリケーションを持っています。ほとんどの場合、アプリはほとんど CPU を使用しません。これはいい。しかし、特定の状況下でポップアップするこの 1 つのウィンドウがあります。Visual Studio で実行したパフォーマンス分析によると、私のコードは CPU をあまり使用していません。Application.Run メソッドは使用しています。そしてそのほとんどが「Functon Body」にあります。CPUの40〜50%のように調整します。
CPU を使用しているものを特定するにはどうすればよいですか? いくつかのものの色をアニメーション化するキー フレームを使用したアニメーションがいくつかあります。それらがCPUを食い尽くしているのだろうかと思っています。それらを一時的に削除できることはわかっていますが、そうするかもしれませんが、何が CPU を消費しているのかを正確に把握する別の方法はありますか?
トニー
PS: それがアニメーションであったことを証明するために、タスク マネージャーで自分のプログラムの CPU 使用率を調べました。アニメーション付きのウィンドウが表示される前は約 0 でした。ウィンドウが表示され、CPUが上がりました。次に、データの状態を変更し、アニメーションを停止するという副作用があるボタンを押しました。CPU が 0 に戻りました。これを数回繰り返したところ、一貫した結果が得られました。私にはアニメーションのように見えます。アニメーションと同時に進行している別の可能性もありますが。
アニメーションは、点滅するライトをシミュレートするためのキー フレーム アニメーションです。キー フレーム アニメーションをダンプし、タイマーを使用して塗りつぶしブラシの色を 2 つの色の間で交換します。
PS: 興味のある方は、WPF アニメーションについて少し調べてみたところ、WPF には少なくとも 2 つの異なるカラー アニメーション キーフレーム クラスがあることがわかりました。私が使用していたもの、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 内の項目の周囲の境界線をアニメーション化する別の同様のアニメーションがありました。同じ変更を加えたところ、CPU 使用率は許容範囲内になりました。それが何なのか正確にはわかりませんが、以前よりもずっと良くなっています。
ありがとう。