スポンサーサイト

 --------
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
カテゴリ :スポンサー広告 トラックバック(-) コメント(-)

ビットマップとキャッシュ

 2009-12-06
Bitmap と Cache の違いがイマイチわからないんだけど?

こことか参考にならないかな?
http://cacaosoft.web.fc2.com/tkool/lecture/rgss2/011.html



Bitmap.new("File")という処理を印刷する行為に喩えてみます。
これは、PC内の"File"という画像ファイルを印刷して写真を作るという処理です。
印刷するのですから、時間がかかります。
これに対して、Cache.system("File")という処理は、
"system"というラベルの付いた箱なり棚なりをまず調べます。
そこに"File"という印刷物がなければ、PC内のファイルから印刷します。
そして、使用後は棚に保存します。
次回印刷するときは、棚に置いてますので、そこから取って使用します。

次の処理を考えてみましょう。
Bitmap.new("File")
Bitmap.new("File")
Bitmap.new("File")
この場合は、"File"を3枚印刷する処理です。

Cache.system("File")
Cache.system("File")
Cache.system("File")
こちらは、1枚を印刷もしくは、棚から取る処理です。

Bitmapが3枚の印刷物があるのに対して、
Cacheは、1枚の印刷物を使いまわしています。
印刷物の数が違いますので、メモリの節約にもなります。
ただし、Bitmapは使われなくなるとシュレッターにかけて処分しますが、
Cacheは、いつまでも棚の中です。
つまり、Cacheは常に1枚分のメモリを消費しているわけです。

それから、Cacheは印刷物1枚ですので、どこかで落書きしてしまうと、
その画像を使っているすべての場所で、らくがきが表示されてしまうことになります。
b1 = Bitmap.new("File")
b2 = Bitmap.new("File")
b3 = Bitmap.new("File")
b1.draw_text(b1.rect, "らくがき")
# b1のみ"らくがき"と表示され、残りのb2,b3には表示されない。
c1 = Cache.system("File")
c2 = Cache.system("File")
c3 = Cache.system("File")
c1.draw_text(c1.rect, "らくがき")
# c1,c2,c3の全てに"らくがき"と表示される

ですので、Cacheを使用する場合は、cloneやdupを使用して、
オブジェクトを複製する必要があります。
c1 = Cache.system("File")
c2 = Cache.system("File")
c3 = Cache.system("File").dup
c1.draw_text(c1.rect, "らくがき")
# c3には、"らくがき"と表示されない


では、Cache.system("File").dup と Bitmap.new("File")は同じか?
そうではありません。
画像の複製は、画像の読み込みより高速です。
例えば、1000x1000, 518KBのjpg画像を100回読み込む処理で比較してみます。
Bitmap.new("File")では、6.766s
Cache.system("File").dupでは、0.579s (外部読み込みを含まない)
という結果になりました。
外部ファイルを読み込む処理はこれだけ遅いということですね。


どうだろう?わかりにくかったかな??

たぶん、次のようなことを言ったんだと思います。
・外部ファイルの読み込みには時間が掛かる (Bitmap.new("FileName"))
・画像の生成は、高速である (Bitmap.new(544, 416))
・初回のキャッシュは、外部ファイルの読み込みを行う (ファイル単位)
・読み込んだ画像は、Hashに格納し次回から高速にアクセスできる
・キャッシュでは、1つオブジェクトを使い回すため破壊的な処理の実行には注意が必要
・オブジェクト(画像)は、dupメソッドで複製することができる
・キャッシュは、F12リセットでは解放されない。



以下、おまけの情報

キャッシュしているすべての画像を解放する
Cache.clear

特定の画像を解放する
Cache.system("Window").dispose
※ フォルダの場所とファイル名は適当に変更してください。

キャッシュの解放処理ですけど、使い道は無いに等しいですね。
解放するくらいならキャッシュしなきゃいいですし。
それとか、Bitmap.new("filename")も使わないですね。
全部キャッシュして使用しましょう。
1度しか使わない画像はキャッシュせずになんて言ってますが、
F12リセット後もキャッシュは残りますから、それ以降は高速になります。
ゲーム中に1度しか表示されないタイトル画面もキャッシュする意味はあるにはありますね。
その辺は好みで。
コメント




 

 ※ コメント内にURLを含めるには、バッククォート(`)をURLの直前に付け加えてください。


管理人のみ閲覧許可 [?]

トラックバック
トラックバックURL:
http://cacaosoft.blog42.fc2.com/tb.php/332-c2d4d976
≪ トップページへこのページの先頭へ  ≫
カレンダー
04 << 2017/05 >> 06
- 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 - - -

カテゴリー
最近の記事
02/28 お返事
02/14 お返事
01/21 お返事
01/12 更新情報
11/28 お返事

最近のコメント
03/16 お返事
01/21 お返事
11/30 z座標
11/20 z座標
08/03 お返事

タグクラウド

リンク
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。