お世話になっております.
WPFのCanvasにPathをAddしてCAD風に線分や円弧を表示しています.
量しだいではありますが,添付した画像くらいの量になるとだいぶ重く,
描画の更新に0.5sくらいかかってしまい,画面内での移動や拡大縮小に難があります
また,もっと多くの図形も表示させる必要があるのでもう少しパフォーマンスがあがらないかなと思い質問させていただきました.
Pathオブジェクトに関しては,一度Addしたらそれのdataプロパティを変更するようにし,毎回DeleteしてAddのようなことはさせていません.(Pathオブジェクトを使いまわしていると表現すればよいのでしょうか)
(画面の描画を繰り返してもGCがほとんど発生しませんし,メモリ消費量が右肩上がり,なんてこともありません)
現状DataTemplateのようなものはPathオブジェクトに対して使用しておらず(勉強中のためまだ自分でかけるほどの力がないのです・・・)
線分の描画を更新しているメソッドを参考のため載せておきます.
あらかじめ,Canvas.ChildにPathがAddされた状態で以下のメソッドを実行します.
C#
1private void drawLine(Point Start_, Point End_, Point Offset_, Color Color_, Path p_) { 2 p_.Stroke = new SolidColorBrush(Color_); 3 p_.StrokeThickness = 1; 4 ((LineGeometry)p_.Data).StartPoint = new Point((Start_.X - Offset_.X) * Magnification, (Start_.Y - Offset_.Y) * Magnification); 5 ((LineGeometry)p_.Data).EndPoint = new Point((End_.X - Offset_.X) * Magnification, (End_.Y - Offset_.Y) * Magnification); 6}
また,二つのCanvasコントロールを重ねて,後のCanvasには図形を表示し,手前のCanvasにはグリッド線や範囲選択の長方形を表示したりと,別々のCanvasに分けたにもかかわらず後ろのCanvasが重いときは手前も重たくなりました.(後は一切描画更新をしない状態で手前だけ更新したとしても)
PCスペックは①i3-2370M+8GB-DDR3,②i7-4770HQ+8GB-DDR3の2台で確認しましたが動作速度に差は感じられなかったのでPCスペックに問題はないと思っております.
WPFの限界でしょうか・・・
何かヒントをいただければと思います
よろしくお願いいたします.
追記
余白でドラッグをグリグリやるときと,大量のPathの上空でグリグリやるときではCPUの使用量が2~3倍程度違うようでした.
CPU使用率で中央付近で山が高くなっていますが,左側はCanvas右上でのドラッグ,山の右側はCanvas左下でドラッグです.
赤い枠が写っていますが,これがマウスについてくる範囲選択の枠です
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/07/09 09:13