aya5 - manual - spped performance


文 version 5 動作速度


version 5のスクリプト実行速度をversion 4との比較で示しています。





簡単なまとめ

  • version 5はversion 4比でおよそ3倍程度の速さで同じコードを実行できる。
  • 簡易配列はversion 4のほうが高速。version 5では極力汎用配列を使いたいところです。


    確認に使用した環境

  • Windows xp Home Edition
  • Pentium4 2.4GHz / 512MB
  • 「伺か」materia 583
  • ゴーストテンプレート「紺野あやめ」





    ベンチマーク1

  • 概要
    数値変数インクリメント、文字列変数に1文字追加を1万回繰り返す

  • 目的
    基礎演算とループの速度を確認する

  • 実行するスクリプト
    foo
    {
        _s_time = GETTICKCOUNT
        _str = ""
        _int = 0
        for _i = 0; _i < 10000; _i++ {
            _str += "A"
            _int++
        }
        GETTICKCOUNT - _s_time
    }
    
    version 4ではGETTICKCOUNTをsystemuptickcountに書き換える。

  • 結果
    5回平均

    DLL実行時間[ms]ver4.97fix0比
    version 4.97 fix0531.2-
    version 5.0178.2×2.98




    ベンチマーク2

  • 概要
    展開が必要な要素を含むスクリプトを1000回繰り返す

  • 目的
    展開速度を確認する
    ランダムトーク出力処理を想定

  • 実行するスクリプト
    foo
    {
        _s_time = GETTICKCOUNT
        var  = 12
        _var = 34
        _result = ""
        for _i = 0; _i < 1000; _i++ {
            _result = "変数var=%var、ローカル変数_var=%_var、関数foo2=%foo2。"
        }
        GETTICKCOUNT - _s_time
    }
    
    foo2
    {
        "テスト"
        "テスト2"
        "テスト3"
    }
    
    コード2
    ループ中のスクリプトを以下に書き換え
    _result = "変数var=%(var)、ローカル変数_var=%(_var)、関数foo2=%(foo2)。"
    

  • 結果
    5回平均

    DLL実行時間[ms]ver4.97fix0比
    version 4.97 fix01125-
    version 5.0390.6×2.88
    version 5.0(コード2)31.2×35.7

  • 備考
    範囲付き埋め込み展開は高速。



    ベンチマーク3

  • 概要
    ソート

  • 目的
    代表的なアルゴリズムの動作速度検証

  • 実行するスクリプト
    複数の簡易配列を使用したもので比較的複雑。ソースは長いので省略。

    コード2
    簡易配列を汎用配列へ置換。

  • 結果
    DLL実行時間[ms]ver4.97fix0比
    version 4.97 fix0500-
    version 5.01078×0.46
    version 5.0(コード2)141×3.54

  • 備考
    version 5は簡易配列が遅い。



    ベンチマーク4

  • 概要
    オーナードローメニュー展開時に来るNOTIFYリクエスト処理速度

  • 目的
    「伺か」向けの確認事項。
    リクエストヘッダのパース速度を確認する

  • 実行するスクリプト
    OnMouseClick
    {
        if reference5 == 1 {      // ref5=1 右クリック
            s_time = GETTICKCOUNT
        }
    }
    
    On_quitbutton.caption  // materiaで最後に送信されるリソース取得リク
    {
        _dtime = GETTICKCOUNT - s_time
        LOGGING(_dtime)
        "終了"
    }
    
  • 結果
    5回平均

    DLL実行時間[ms]ver4.97fix0比
    version 4.97 fix0169.2-
    version 5.0168.6×1.0

  • 備考
    version 4ではDLL内でリクエストヘッダの構文解析をしていたが、version 5ではスクリプトで行なっている。
    このためversion 5では遅いはずだが、等速で動けているのでこれで問題ないと判断。