fill_rectとbltはどっちが速いのか?
昨日久しぶりにノートパソコンでツクール動かした。そしたらなんかめっさ重い。
比較的性能のいいデスクトップだとさくさく進むけど、ノートだとこんなに重くなるとは……。スクリプトを無茶苦茶に書いたのが原因なのはわかるけど……。
ということで少し「速さ」というのにもこだわってみる事にしました。
基本は描画関係。
とりあえず処理を10000回回して速度をはかります。ばらつきがあるので50000回回して5で割ってみました。スクリプトはかなり適当。一応使ったスクリプトを続きのとこに載せておきます。
Timeで時間引っ張ってその差を求めただけです。単位は秒です。
スペルがアレだがそのあたりは大目に見るのが大人ってものだ。
結果。(20 x 20)
処理 |
1回目 |
2回目 |
3回目 |
fill_rect |
0.0272 |
0.0202 |
0.0278 |
blt |
0.06 |
0.0618 |
0.0474 |
gradient_fill_rect |
0.0732 |
0.08 |
0.0964 |
draw_text |
0.9118 |
0.9118 |
0.9252 |
サイズを変えてもう一回(128 x 128)
draw_textはサイズあまり関係ないので計測せず
処理 |
1回目 |
2回目 |
3回目 |
fill_rect |
0.0792 |
0.1026 |
0.0908 |
blt |
0.8102 |
0.8257 |
0.8078 |
gradient_fill_rect |
1.8556 |
1.8674 |
1.87 |
つまり、
fill_rect > blt > gradient_fill_rect
となりました。
何かの参考にでもナレバ
ちなみに使った処理は「続き」から ↓
結構下なの気をつけて orz
かなり適当に書いてるので参考にはならないかも
def test_a # fill_rect
window = Window_Base.new(200,200,160,160)
color_a = Color.new(255,0,0)
r = Rect.new(0,0,128,128)
start_time = Time.now
50000.times{|i| window.contents.fill_rect(r,color_a)}
end_time = Time.now
str = (((end_time - start_time) / 5).to_s + "s" )
window.dispose
p str
end
def test_b # blt
cache_a = Cache.system("Window")
window = Window_Base.new(200,200,160,160)
r = Rect.new(0,0,128,128)
start_time = Time.now
50000.times{|i| window.contents.blt(0,0,cache_a,r) }
end_time = Time.now
str = (((end_time - start_time) / 5).to_s + "s" )
window.dispose
p str
end
def test_c # gradient_fill_rect
cache_a = Cache.system("Window")
window = Window_Base.new(200,200,160,160)
color_a = Color.new(255,0,0)
color_b = Color.new(0,0,255)
r = Rect.new(0,0,128,128)
start_time = Time.now
50000.times{|i|
window.contents.gradient_fill_rect(r, color_a, color_b)
}
end_time = Time.now
str = (((end_time - start_time) / 5).to_s + "s" )
window.dispose
p str
end
def test_d # draw_text
cache_a = Cache.system("Window")
window = Window_Base.new(200,200,64,64)
color_a = Color.new(255,0,0)
color_b = Color.new(0,0,255)
start_time = Time.now
50000.times{|i|
window.contents.draw_text(0,0,20,20, "あ")
}
end_time = Time.now
str = (((end_time - start_time) / 5).to_s + "s" )
window.dispose
p str
end
PR
COMMENT