|
分類:[C#]
開発環境は Windows7 X64 C#(C# 2010 Express:とりあえず) です。 テキストファイルには描画のモトネタがあって、 XAML ではなくプログラムで Canvas に SHAPE などを使い作図しています。 テキストファイルはSVGでもなく、某会社の独自のフォーマットです。 絵に鮮明が求められるので WPF のアプリケーションとして構成しています。 描画のコマンド(線、円、ポリゴン、円弧、拡大、縮小、など)が多彩で、しかも数十万を軽く超えるような UIElement が必要になっています。 実際に Canvas に作図し、画面には表示していますが、UIElement数が25万程度で Canvas に展開してから表示されるまで数十秒かかっています。先日、もっと大きなテキストファイルを作図したところ OutofMemory になってしまいました。 WPFがこんなにメモリを消費するものだとは知らずに開発を始めてしまいました。PCには12Gのメモリとビデオボードの2Gのメモリがあります。思うに同一 Canvas に展開出来る UIElement の最大数を超えたのではないかと思っています。(限度はあるのでしょうか?) 質問は以下です。 小さな四角エリア(以後、小四角と呼ぶ)に展開する UIElement 数も膨大ですが、たかだか10万以下です。 小四角に展開(描画)する内容は全て同じですし同じ大きさです。 この小四角をもっと大きな四角の中に数百個ちりばめます。小四角同士は重なる事はありません。(碁盤の目のように配置。) 今は、一つの Canvas に全てを展開しようとして? OutofMemory になっています。 本来?なら、小さな四角エリアを一つだけ作図して、他の部位にコピーするようなイメージの方法が可能ならいいのですが、UIElement のインスタンスコピーも出来ず、かといって他の部位に Child.Add() すると怒られるし、手詰まりとなっています。 ドットイメージならVB6ですが画面の自由位置にコピーして表示したりは出来るのですが、 WPF はそのようにはいかないようです。 何とか、小さな四角エリアを一つだけ作図し、他にコピーするようなイメージで表示は出来ないものか、の質問です。 当然ですが、作図&表示の速度アップも目指しています。 どなたか、解決法をご存知の方、宜しくお願いいたします。
|