私はこのWPF-VS2008 ScreenSaver templateをとり、新しいスクリーンセーバーを作り始めました。私はwinForms-platform(GDI +)スクリーンセーバーに関するいくつかの経験を持っているので、WPFで少し失われています。WPF - スクリーンセーバーのグラフィックパフォーマンスの向上
- 私のスクリーンセーバーの背景要素はCanvasです。
- DispatcherTimerティックは、30ミリ秒〜33ミリ秒に設定されています。
- 背景色は巨大なLinearGradientBrushの1つです。
- ランダムに計算された(初期化された)背景色+アルファチャンネルで描画されたn楕円形(使用可能な画面ごとに、私のローカルコンピュータには2つあります)があります。彼らはすべてCanvas's Childrenコレクションに入っています。
- 私はいくつかのロジック(すべてのDispatcherTimerティック)で画面の周りに楕円を動かしています。楕円ごとに移動し、各楕円についてCanvas.SetLeft(...)とCanvas.SetTop(...)を呼び出します。
- N(楕円の数)が> 70-80より大きい場合、グラフィックのスローダウンに気付き始めます。
ここで、より高いN値を選択するときにグラフィックの滑らかさを改善するためにできることがあれば、私は疑問に思いますか?私の楕円を動かす前に「何か」を「動かす」ことができ、終わったら「何かを止めさせる」ことができますか?それとも、私ができるトリックは他にありますか?
Nが50のときはすべてパフォーマンスが低下しますが、すべてがスムーズに動作するはずです。楕円がすべて同じ場所(透明度の高いもの)にあっても、全く問題はありません。
私は「楕円」を意味していました。私のキャンバスの子供はEllipseGeometryインスタンスです。 WPFでもう少しGDI +のようなトリックがあるようです(スタイルをダブルクリックして少しでも遊ぶことができます)。 – sabiland
EDIT:コメントのためのJohn&NirへのThx。 – sabiland
私は答えを更新しました。 – John