【CoR】配列によるフリーズ回避

投稿者:Material 315238 1 mini shainy 投稿日:2023/03/20 17:21

GC.start

これだけです。

































もう少し解説

【CoR】配列のお話【フリーズ問題】

からスクリプトを引用させていただきます

scene 'start' do
  i = 0

  update do
    # 配列生成
    arry = [0]*500000

    i += 1
    debug_log "配列生成回数:#{i}"
  end
end

# シーンを開始する
start_scene "start"

これをそのまま実行すると途中で止まってしまいます(メモリリーク)
のでこれに

scene 'start' do
  i = 0

  update do
    # 配列生成
    arry = [0]*500000

    i += 1
    debug_log "配列生成回数:#{i}"

    GC.start # メモリ解放
  end
end

# シーンを開始する
start_scene "start"

こうすると止まりません、簡単ですね

ちなみに上のコードだと一番最初のupdateではメモリ解放されてない(はず)です
2回目のupdateで1回目の配列分が解放されます(Rubyの仕様はわからないので予想)

使い終わった配列を確実にそのタイミングでメモリ解放したい場合は

arry = nil # 配列への参照が失われる
GC.start # 参照が失われた配列のメモリ解放

これでいいはず


尚、スプライトの当たり判定によるフリーズはこの方法では解消できません、いけそうな方法が見つかりましたが検証不足なので割愛

コメントする

コメントするには、ログインする必要があります。

コメント一覧

コメントはありません。