質問: new Point((End_.X - Offset_.X) * Magnification, (End_.Y - Offset_.Y) * Magnification); } ``` また,二つのCanvasコントロールを重ねて,後のCanvasには図形を表示し,手前のCanvasにはグリッド線や範囲選択の長方形を表示したりと,別々のCanvasに分けたにもかかわらず後ろのCanvasが重いときは手前も重たくなりました.(後は一切描画更新をしない状態で手前だけ更新したとしても) PCスペックは1i3-2370M+8GB-DDR3,2i7-4770HQ+8GB-DDR3の2台で確認しましたが動作速度に差は感じられなかったのでPCスペックに問題はないと思っております. WPFの限界でしょうか・・・ 何かヒントをいただければと思います よろしくお願いいたします. ![アプリ実行例](https://teratail.storage.googleapis.com/uploads/contributed_images/9df8e68d398b8e05a4c05b7890c18c9f.png) **追記** 余白でドラッグをグリグリやるときと,大量のPathの上空でグリグリやるときではCPUの使用量が2~3倍程度違うようでした. CPU使用率で中央付近で山が高くなっていますが,左側はCanvas右上でのドラッグ,山の右側はCanvas左下でドラッグです. 赤い枠が写っていますが,これがマウスについてくる範囲選択の枠です ![イメージ説明](https://teratail.storage.googleapis.com/uploads/contributed_images/9441a1d4e46ce005ceb3163caa5cea0c.png)
回答: あてずっぽうのコメントであることをお断りせねばなりませんが、例えばPhotoShopのような画像ソフトで多数のレイヤーを重ねた状態で一番上にある画像を変更したり移動したりということをよく行うと思います。その際に下位のレイヤーが多少多くても(といっても数段ぐらいしかやったことないですが)一番上のレイヤーの編集に支障をきたすようなもたつきはありません。 PhotoShopがどのように最適化しているか知る由もありませんが、一つ考えられることは、動かない殆どの部分の画像のレンダリングは一旦オフスクリーンイメージバッファに対して行ってしまい、編集状態では常に1枚の背景画像と一番手前の編集レイヤーの2レイヤー」とすると再描画の際のレンダリングのオーバーヘッドは軽減されるのではないかと思いました。 本件でいえばCanvas上へパスを用いて多数のオブジェクトを配置するとオブジェクトを変更する度に(影響のある部分のクリッピングを行ったとしても)かなり多数のパスの再レンダリングが必要でありそのために遅くなっているのではないかと思えました。 実験として、背景に画像を置いた上でご質問にある画像の一部分の部品程度のパスのみ編集する実験をしてみてはいかがでしょうか?それで軽くなるようなら、「編集対象以外の図形をオフスクリーンバッファーへレンダリングしておく」といった工夫で高速化できる可能性があると思います。