「Tonyu Tip_処理速度について」の編集履歴(バックアップ)一覧はこちら
「Tonyu Tip_処理速度について」(2005/10/06 (木) 00:37:06) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
*Tonyuの処理速度について
#contents
**測定環境
OS : WindowsXP
Tonyuのバージョン : 1.21
CPU : Athron64 3400+ 800MHz(2.4GHzをクロックダウン)
グラフィックカード : 高性能
**オブジェクトの実行負荷
オブジェクトを生成した場合の実行負荷
(オブジェクトの実行に要する時間をSpriteの値を基底に正規化したもの)
(値の大きいものほど負荷が高い)
|''オブジェクト'' |''負荷''|
| | |
|Sprite |1.0 |
|Dx_基本 |1.8 |
|Dx_ScaleX=2 |3.3 |
|Dx_半透明 |2.8 |
|Text_半角 |4.4 |
|Text_全角 |3.1 |
|Panel_50*50 |2.8 |
|Panel_100*100 |5.9 |
|Panel_200*200 |13.3|
|Secret |0.5 |
><負荷の算出式>
> 負荷 = 1 / ( [そのオブジェクトのFPS] / ["Sprite"のFPS] )
>但し、FPSは"Sprite"のFPSが60以下になるよう、オブジェクト数を増やして測定している
・各々”Char”を省略している
・TextCharの項目分けは、表示するテキストの種類
(左から、テキスト無し、半角英数字1文字、同2文字、全角1文字)
・PanelCharの項目分けは、パネルのサイズ
****memo
・表示されるオブジェクトは、その大きさに比して負荷が重くなる
・オブジェクトが画面内に表示されていない場合、負荷は軽くなる
(ex.alpha=0、座標が画面外、などの場合)
・測定環境により、値は大きく変わる可能性がある(未確認)
**命令の処理時間
命令の実行にかかる負荷。
(命令の実行に要する時間を演算命令の値を基底に正規化したもの)
| ''命令'' |''負荷''|
| | |
|for |2.1 |
|while |2.1 |
|if |0.8 |
|演算命令 |1.0 |
|a=a+b; |1.5 |
|a++; |1.0 |
|a+b (文字列結合) |9.0 |
|a; |0.5 |
|関数呼び出し |1.3 |
|print("@") |881.3 |
|drawText("@") |62.8 |
|drawText("@") |49.7 |
|drawLine_長さ10 |10.4 |
|drawLine_長さ100 |10.8 |
|fillRect_50×50 |16.9 |
|fillRect_100×100 |33.5 |
|$panel.drawText("@") |199.0|
|$panel.fillRect_100×100|150.8|
|Array.get() |2.5 |
|Array.set(1) |2.9 |
|Array.set("@") |21.7|
"@"は全角
"@"は半角
演算命令には、”算術演算”、”論理演算”、”代入”が含まれる。
算術演算の例 : a+b;
論理演算の例 : a&&b;
代入の例 : a=b;
><負荷の算出式>
> 負荷 = [ その命令の実行時間 ] / [ "演算命令"の実行時間 ]
****memo
・実際にかかる時間が知りたい場合は、演算命令の実行時間を測定し、表の値にそれを掛ければよい
**FPS算出式(暫定)
>FPS = 1/([命令の実行時間の合計]*10+[オブジェクトの実行時間の合計])
(時間の単位は秒)
(命令の実行時間は、描画系命令のみに影響される様に感じる。
つまり、演算系命令の実行時間は関係ないのでは?)
[実行時間の合計]は、"命令の実行時間"の項目で解説済み。
[オブジェクトの処理時間]は、while()ループのみを行うオブジェクトを生成し、そのときのFPSを測定、そしてその逆数を取ることで求められる。
但し、FPSは60以上にはならないので、60以下になる数のオブジェクトを生成し実行時間を求め、その時間をオブジェクトの数で割る必要がある。 "Sprite"の値さえ求めれば、"オブジェクトの実行負荷"の表の値に掛ける事で、他のオブジェクトの実行時間も求められる。
フツーに考えれば、*10は必要ないはずだが、これが無いと結果が合わない。何故?
*Tonyuの処理速度について
#contents
**測定環境
OS : WindowsXP
Tonyuのバージョン : 1.21
CPU : Athron64 3400+ 800MHz(2.4GHzをクロックダウン)
グラフィックカード : 高性能
**オブジェクトの実行負荷
オブジェクトを生成した場合の実行負荷
(オブジェクトの実行に要する時間をSpriteの値を基底に正規化したもの)
(値の大きいものほど負荷が高い)
|''オブジェクト'' |''負荷''|
| | |
|Sprite |1.0 |
|Dx_基本 |1.8 |
|Dx_ScaleX=2 |3.3 |
|Dx_半透明 |2.8 |
|Text_半角 |4.4 |
|Text_全角 |3.1 |
|Panel_50*50 |2.8 |
|Panel_100*100 |5.9 |
|Panel_200*200 |13.3|
|Secret |0.5 |
><負荷の算出式>
> 負荷 = 1 / ( [そのオブジェクトのFPS] / ["Sprite"のFPS] )
>但し、FPSは"Sprite"のFPSが60以下になるよう、オブジェクト数を増やして測定している
・各々”Char”を省略している
・TextCharの項目分けは、表示するテキストの種類
(左から、テキスト無し、半角英数字1文字、同2文字、全角1文字)
・PanelCharの項目分けは、パネルのサイズ
****memo
・表示されるオブジェクトは、その大きさに比して負荷が重くなる
・オブジェクトが画面内に表示されていない場合、負荷は軽くなる
(ex.alpha=0、座標が画面外、などの場合)
・測定環境により、値は大きく変わる可能性がある(未確認)
**命令の処理時間
命令の実行にかかる負荷。
(命令の実行に要する時間を演算命令の値を基底に正規化したもの)
| ''命令'' |''負荷''|
| | |
|for |2.1 |
|while |2.1 |
|if |0.8 |
|演算命令 |1.0 |
|a=a+b; |1.5 |
|a++; |1.0 |
|a+b (文字列結合) |9.0 |
|a; |0.5 |
|関数呼び出し |1.3 |
|print("@") |881.3 |
|drawText("@") |62.8 |
|drawText("@") |49.7 |
|drawLine_長さ10 |10.4 |
|drawLine_長さ100 |10.8 |
|fillRect_50×50 |13.4 |
|fillRect_100×100 |16.9 |
|fillRect_200×200 |36.8 |
|$panel.drawText("@") |199.0|
|$panel.fillRect_100×100|83.9|
|Array.get() |2.5 |
|Array.set(1) |2.9 |
|Array.set("@") |21.7|
|str.split() |30555.5 |
|copyRect_50×50 |40.5 |
|copyRect_100×100 |129.6 |
|copyRect_200×200 |494.8 |
|fw.writeLn("@") |57.9 |
|fr.readLn() |46.3 |
|valueOf("1") |61.1 |
|valueOf("1.0") |12.9 |
"@"は全角
"@"は半角
演算命令には、”算術演算”、”論理演算”、”代入”が含まれる。
算術演算の例 : a+b;
論理演算の例 : a&&b;
代入の例 : a=b;
><負荷の算出式>
> 負荷 = [ その命令の実行時間 ] / [ "演算命令"の実行時間 ]
****memo
・実際にかかる時間が知りたい場合は、演算命令の実行時間を測定し、表の値にそれを掛ければよい
・split()は異常に重い(演算命令の実に3万倍!)。使用時は注意されたし。
**FPS算出式(暫定)
>FPS = 1/([命令の実行時間の合計]*10+[オブジェクトの実行時間の合計])
(時間の単位は秒)
(命令の実行時間は、描画系命令のみに影響される様に感じる。
つまり、演算系命令の実行時間は関係ないのでは?)
[実行時間の合計]は、"命令の実行時間"の項目で解説済み。
[オブジェクトの処理時間]は、while()ループのみを行うオブジェクトを生成し、そのときのFPSを測定、そしてその逆数を取ることで求められる。
但し、FPSは60以上にはならないので、60以下になる数のオブジェクトを生成し実行時間を求め、その時間をオブジェクトの数で割る必要がある。 "Sprite"の値さえ求めれば、"オブジェクトの実行負荷"の表の値に掛ける事で、他のオブジェクトの実行時間も求められる。
フツーに考えれば、*10は必要ないはずだが、これが無いと結果が合わない。何故?
表示オプション
横に並べて表示:
変化行の前後のみ表示: