午後わてんのブログ

ベランダ菜園とWindows用アプリ作成(WPFとC#)

複数の画像を並べて重ねて1枚の画像にするPixtack紫陽花2.4.12.87

前回
 
図形2の編集中に画像を消去した時にサイズ変更の頂点が残ってエラーになっていたのを修正
枠外の描画がマウスドラッグのサイズ変更により枠内に入ってドラッグが終了したら再描画するようにした
上と右に変更した時中の画像が動いてしまうのを修正
図形描画用頂点の移動で再描画20回毎にメモリの開放をするようにした、メモリの使用量が激減した
サイズ変更中も再描画をしていてこっちのほうがメモリを消費するので10回毎にメモリ解放にした
編集画像に背景をつけるようにしたので頂点移動中も背景が映るようになった
この背景は編集開始した時点の画像サイズと位置にあったものになる
 
 
図形画像の下に別の画像があった状態での編集の様子
イメージ 1
昨日
 
イメージ 2

矢印の頂点を動かしている時にも下にある画像が消えないようにしてみたけど
それも編集開始した時点からサイズ変更したり移動すると消えたりずれたりする
サイズ変更の時も範囲外の描画もするようにしたせいか動作が遅くなって
メモリもたくさん消費するようになった、編集図形の大きさによるけど
上の画像でも300から500MBくらいの消費なので
メモリの開放をするようにした、これで線の描画で80MB、サイズ変更で300MBくらいになった
 
今までメモリの開放はSystem.GC.Collect()だけしか書いていなかったけど、これを使うのは極力避けたほうがいいというのも見たことがあってググったら
 
 
ここみると
GC.Collect()
        GC.WaitForPendingFinalizers() 'これと
        GC.Collect() 'ここでもう一回、こうした方がいいらしい
こうした方がいいらしいのでそうしたw
 
こっちはゲーム作成用の説明みたいなんだけど
画像を高速で切り替えるってのは状況が似ているから当てはまるかなあと
マウスドラッグで移動している間は常に新しい画像を描画して表示して
一個前の画像は表示を消してもう使うことはないからメモリからどんどん消したい
VBは自動で使っていないものを判断して使っていないもの消して最適になるようにしているから、わざわざ指定しなくていいらしいけど
今使っている環境ではメモリが足りないエラーが出てしまうw
8GB積んでいて空いているのは1GBくらいなのでそれを超えてほしくない
だいたいChromeだけで5GBくらい使っているのが問題か
 
 
 
ダウンロード先1
Pixtack紫陽花_20141230_x64.zip
Pixtack紫陽花_20141230_x86.zip
テスト05-2パネル追加_20141230.zip
ダウンロード先2(ヤフーボックス)
 
 
次回