データ量が極端に多いカードがあるシナリオは、開くのに時間がかかる
こんばんは。いつも更新お疲れ様です。題の通りの不具合を見つけたのでご報告。
ギルドのシナリオ「50spShop」には、データ量が3MB 近くあるカードが存在します(Beast6,Item24)。自分の環境では(CPU:2Core 2.4GHz OS:WinXP cwxeditor:fnine_20130804e)、WirthBuilder で新規シナリオを作って Beast6 をインポートし保存、XEditor で開こうとすると、1分以上かかります。
シナリオ「50spShop」自体を XEditor で開こうとすると、5分経っても開けません。1MB 以上のカード(beast2,4,6 item24)を WirthBuilder で 削除し保存、それから XEditor で開きなおすと、すんなり開ける…という具合です。
自分のパソコンがしょぼいだけという気もしますが……ご確認、よろしくお願いします。
Comments (8)
-
repo owner -
repo owner - marked as minor
-
repo owner - marked as enhancement
-
reporter なるほど……バグが出来るような仕組みでは、確かに困りますね。分かりました。
もし今後何かいい方法が見つかったら、それを採用していただければ。
-
repo owner 各所のパフォーマンス調べて改良できそうもないなーとか言って半分諦めて他の事やってたらなんか速くなってた……
なんか変な事して遅くなってた部分をうっかり見逃してしかも潰しちゃったってこと?
それとも何か新たなバグが発生してるってこと?
私の所でだけ発生してる現象かもしれないので、ちょっと試してみていただけないでしょうか。
https://bitbucket.org/k4nagatsuki/cwxeditor/downloads/cwxeditor_fnine_20130815c.zip
-
repo owner 速くなった原因が分かりました。
アンドゥなどのために内部でイベントツリーをコピーする処理があるのですが、
- そこのコードが少し前の更新でバグが発生し、
- イベントツリーのコピーが致命的に失敗するようになって、
- その結果、召喚獣召喚効果に召喚獣をセットする処理で召喚獣のデータのコピーをしている処理が走らなくなり、
- 召喚獣のデータのコピーが一番時間を食っていたので速くなった
ということだったようです。
召喚獣召喚効果の新規読込時には召喚獣のデータをコピーする必要がないので、そこで余計なコピーが発生しないようにしたらコピー処理のバグを直した上でも速くなりました。
https://bitbucket.org/k4nagatsuki/cwxeditor/downloads/cwxeditor_fnine_20130815d.zip
パフォーマンス問題の5%のコードが99%の時間を使ってるという経験則は今回も有効だった。
もっとちゃんと調べればよかった……。
-
reporter おおおお…! 劇的に早くなってる! 自分のところでも10秒きりました!(@cwxeditor_fnine_20130815e)
他の更新をしながらも気にかけていただいて、ありがとうございます。結果良ければ全てよし、ですよ。更新お疲れ様でした。
-
repo owner - changed status to resolved
fixed
#66 - Log in to comment
読込を高速化する手段の一つとして、各ファイルの内容を全部読み込まず都度読み込むという手を考えたことがあります。なぜそれをしなかったかというと、使用回数のカウントやエリア等のIDが変わった時のリンクの張り直しが、読み込んでいない箇所で機能しなくなってしまうからです。前者はともかく後者はバグを生むので機能しないと困ります。
それで、WirthBuilderの挙動を確かめてみたのですが、どうも一部データは必要になるまで読み込まないというアプローチを採用しているようです。例えば召喚効果の中にある召喚獣の使用時イベント内でフラグを使用しているような場合、そのフラグの名称の変更はおそらくバグの発生を意味します(参照の検索でも出てこないです)。cwxeditorでは状態変数どころかあらゆるものを再配置できるので、その挙動は致命的です。
さて、これをどうしたものか……純粋にパフォーマンス上の問題ですが、たしかに遅すぎるので改善した方がよいような気もします。よいサンプルも手に入ったので、改善できないか色々試してみます。
申し訳ありませんが優先度は下げさせてください。