Skip to content

v1.3.4

Choose a tag to compare

@github-actions github-actions released this 27 Jun 10:52
· 8 commits to main since this release

v1.3.4 - Lua スクリプト for YMM4

ネイティブ実行中の obj.getobject を高速化したリリースです。
同じオブジェクトを繰り返し参照するスクリプトで、本体プロセスへの問い合わせ回数を
削減し、大幅に高速化しました。


改善

1. 同一オブジェクト参照のキャッシュによる高速化

ネイティブ実行中の obj.getobject は、解決に必要なシーン情報が本体プロセス側にしか
存在しないため、呼び出しごとに本体プロセスへの問い合わせ(往復)を伴います。この往復は
1 回あたりのコストが大きく、同じオブジェクトをループ内で繰り返し参照すると無視できない
負荷になっていました。

本リリースでは、同じタグ・同じフレームへの連続した問い合わせをフレーム内でキャッシュ
するようにしました。2 回目以降は本体への往復を行わずにキャッシュした結果を返すため、
同一オブジェクトを繰り返し参照するスクリプトでは問い合わせ回数が 1 回に削減されます。
内部計測では、該当パターンが 1000 倍以上高速化することを確認しています。返り値は従来
どおり呼び出しごとに新しいテーブルであり、出力結果は変わりません。


注意事項

  • キャッシュが効くのは、同じタグ・同じフレームへの連続した問い合わせです。毎回異なる
    オブジェクトやフレームを参照する場合は、その都度本体プロセスへの往復が発生します。
    この場合は結果を変数へ保持して呼び出し回数を抑えることを推奨します。

内部実装

  • ワーカー側に直前の問い合わせ結果のキャッシュを設け、同一タグ・同一フレームへの連続
    呼び出しでは本体への往復を省きます。キャッシュは各フレームの実行開始時に破棄されるため、
    フレームをまたいで古い結果が再利用されることはありません。
  • 本体側ではタグ文字列の確保を使い回し、問い合わせごとのアロケーションを抑えることで、
    長時間の出力における GC 負荷を軽減しました。