【解決済み】コンソールを開いているとメモリをドンドンと食われていく…

アバター
にいやん
記事: 203
登録日時: 2016年7月02日(土) 00:38
お住まい: 地獄4丁目西のゴミ置き場
連絡を取る:

【解決済み】コンソールを開いているとメモリをドンドンと食われていく…

投稿記事by にいやん » 2019年5月19日(日) 00:25

少々気になったことがあったので質問します。
下の画像の通りにイベントに並列処理の実行内容を記述してコンソールを起動するとメモリがドンドンと食べられていきます。コンソールを起動していないときは特に問題はなく快適なのですが、私の作っているゲームの特性上、並列処理の負荷(マップリフレッシュの監視)をコンソールで気にしながら制作をしているので、コンソールがドンドン重くなっていき非常に不便です。

実行内容はスクリプトか条件分岐のスクリプトです。

確か私の記憶ではバージョン1.5.2のときは特に問題はなかったと思いますが、最近1.6.2にバージョンアップして目に見て重いと感じるようになりました。プラグインは初期設定のものを含めて全てOFFにして確認しています。私のパソコンはwindowsでCore i7でメモリ16GB積んでいるのでスペック不足ではないはずです。もしよろしければどなたか分かる方に確認をしていただきたいと思っています。

↓クリックで大きくなります。
z.jpg
最後に編集したユーザー にいやん on 2019年5月19日(日) 20:00 [ 編集 1 回目 ]

アバター
トリアコンタン
記事: 1637
登録日時: 2015年11月10日(火) 21:13
お住まい: きのこ王国
連絡を取る:

Re: コンソールを開いているとメモリをドンドンと食われていく…

投稿記事by トリアコンタン » 2019年5月19日(日) 14:09

こんにちは!
どうやらツクール1.6.0以降で使用しているエンジンには、コンソールを開いている状態でスクリプトを実行すると、パフォーマンスが悪化する問題があるようです。

コンソール上でF1キーを押すと下記のような設定画面が表示されるので、赤枠のチェックを有効にしたら負荷が軽減されました。もしかしたら同じ方法で改善するかもしれません。
Ds8F1ZlVYAAAyZo.jpg



参考
https://twitter.com/triacontane/status/1066027678195580928
プラグイン関連のトラブルが発生した際の切り分けと報告の方法です。
http://qiita.com/triacontane/items/2e227e5b5ce9503a2c30

[Blog] : http://triacontane.blogspot.jp/
[Twitter]: https://twitter.com/triacontane/
[GitHub] : https://github.com/triacontane/
アバター
にいやん
記事: 203
登録日時: 2016年7月02日(土) 00:38
お住まい: 地獄4丁目西のゴミ置き場
連絡を取る:

Re: コンソールを開いているとメモリをドンドンと食われていく…

投稿記事by にいやん » 2019年5月19日(日) 20:00

トリアコンタンさんの言われた通りに赤字のところにチェックをしたらパフォーマンスが改善されました!やっぱり1.6.0以降で何か変わっていたということですね。すぐに解決できる問題で良かったです。ありがとうございました。
アバター
にゃたま
記事: 693
登録日時: 2016年1月13日(水) 23:53
お住まい: 床下の猫王国
連絡を取る:

Re: 【解決済み】コンソールを開いているとメモリをドンドンと食われていく…

投稿記事by にゃたま » 2019年5月19日(日) 22:30

トリアコンタン様

私のほうからもお礼を言わせてください!
コンソールで重くなる現象をダイレクトに受けておりましたので
こんな簡単な操作で軽くなることに驚いております。
確かに1.5.xの頃のバージョンだとここまで重くなかったので
多少疑問には思ってましたが最近は異常なくらい重くなってたので
なるべくコンソールは開かないようにしようと思っていたくらいでした。
これからバリバリコンソール使ってデバッグできます。
そもそもF1を押すとコンソールにメニューが表示されるなんて知らなかったのでこちらも驚きました。
バージョン1.6.x使用のユーザー全てにとても朗報な事項ですので周知させたほうがよさげですね!
因みにDisable async stack tracesをオフにすることで何かデメリットとかあるんでしょうかね…
まあ何か便利になることがあるとしても動作が軽くなることによるメリットが大きすぎるので
是非これからはこれをオフにしてツクろうとおもいます。



にいやん様

とても有意義なトピックを立てていただきありがとうございました!
アバター
にいやん
記事: 203
登録日時: 2016年7月02日(土) 00:38
お住まい: 地獄4丁目西のゴミ置き場
連絡を取る:

Re: 【解決済み】コンソールを開いているとメモリをドンドンと食われていく…

投稿記事by にいやん » 2019年5月19日(日) 23:07

そもそもこの問題は1.6.0のバージョンアップが配布されたときに既に見つけていたわけですが、あのときはTerraxLightingが1.6.0のバージョンアップに追いついてないせいだと思い、すぐにMVのバージョンを1.5.2に戻して今まで使っていました。1.6になってかなり立つのでもう大丈夫かなと思ってバージョンアップした次第です。そもそも1.6.0は別の問題で配布停止になったのでそれどころではなかったわけですが…Terraxさん冤罪でごめんなさいm(_ _)m

おそらく通常のスクリプトの実行では対処は必要ないはずです。スクリプトと並列処理を使ったときに限りコンソールが激重になる現象ですので。

にゃたまさん、ゲーム制作においてスタックトレースはとても重要なのでこの部分の問題を解決できて良かったです。お互い頑張ってゲームを作っていきましょう!そして問題解決の方法を調査して頂いたトリアコンタンさん、改めてお礼申し上げます、ありがとうございました。
アバター
トリアコンタン
記事: 1637
登録日時: 2015年11月10日(火) 21:13
お住まい: きのこ王国
連絡を取る:

Re: 【解決済み】コンソールを開いているとメモリをドンドンと食われていく…

投稿記事by トリアコンタン » 2019年5月20日(月) 23:41

こんばんは!

「Disable async stack traces」は「非同期スタックトレース」の機能を「禁止」するかどうかの設定です。
普通にゲーム制作するうえでは禁止(チェックを付ける)にしても特にデメリットはありません。

なお、今回の直接的な原因は「eval(与えられた文字列をJavaScriptとして動的に解釈して実行する関数)」という関数にあります。
この関数はイベントコマンド「スクリプト」で使われますが、プラグインによっては内部で多用している場合があるため、常に「チェックを付ける」ことを推奨します。

---

念のために同機能の詳細を解説します。
プログラマ向けなので、必要なければ読み飛ばしてしまってOKです。

開発者ツール(コンソール)を含む一般的なデバッガには「スタックトレース」という、どの関数を経由して現在の処理まで辿り着いたかを通った順番に記憶しておく機能があります。

しかし、JavaScriptには「非同期処理」(時間の掛かる処理を呼ぶときに、実行完了まで待機せず次の処理の実行に移る処理方式)が数多く存在します。

非同期処理のコールバック関数(時間の掛かる処理が完了したときタイミングで呼ばれる関数)に指定されて呼ばれた場合は通常のスタックトレースを使って呼び出し元を辿ることはできません。

そこで「非同期スタックトレース」を使うと、非同期処理のコールバック関数から呼び出し元を辿ることができます。

・「非同期スタックトレース」を使わない場合(関数「test」がどこから呼ばれたか分からない)
2019-05-20 (2).png


・「非同期スタックトレース」を使う場合(関数「test」が関数「test2」から呼ばれたことが分かる)
2019-05-20 (1).png



つまり、この機能が必要なのは自分で非同期処理を実装するプラグイン開発者のみなので、通常のゲーム開発では不要です。
プラグイン関連のトラブルが発生した際の切り分けと報告の方法です。
http://qiita.com/triacontane/items/2e227e5b5ce9503a2c30

[Blog] : http://triacontane.blogspot.jp/
[Twitter]: https://twitter.com/triacontane/
[GitHub] : https://github.com/triacontane/
アバター
にゃたま
記事: 693
登録日時: 2016年1月13日(水) 23:53
お住まい: 床下の猫王国
連絡を取る:

Re: 【解決済み】コンソールを開いているとメモリをドンドンと食われていく…

投稿記事by にゃたま » 2019年5月21日(火) 09:36

トリアコンタン様


本記事、すごく勉強になりました。
私も一応プラグインの一部改変などでコードを見る機会が多く、
そのへんの仕組までしらなかったので実行まで待機するのではなく次の処理に移る
(並列処理のようなもの?)ことが可能であることが目から鱗でした。
そういった非同期処理を書いたことがないので折角ですので参考程度に教えてほしいですが
具体例的にはどういったプラグインで使われているのでしょうか?
トリアコンタン様制作のプラグイン群からで構いません。
尚、「Disable async stack traces」をオンにしたうえで
そういった非同期処理を書いたプラグインを実行することで動作が重くなるといった認識でよいのでしょうか?
非同期処理が書いてないものでしたらチェックをつけても動作は遅くならないのですね?
あと、evalは過去に様々なプラグインで見たことあるのですがこれを「Disable async stack traces」
をオンにして使用した場合evalで評価されたされた式にエラーがあったときに
スタックトレースでどのevalにエラーがあったかを出力してくれる感じですかね?
(すみません。自分はそもそもスタックトレースというものを知らなかったオチです…)
逆にチェックをつけないとエラー原因が不明になる感じでしょうか。
ということはぶっちゃけevalは非同期処理に該当するんですね?
色々疑問だらけですみません。
とりあえずは何か原因不明のエラーがある??ってときに状況に応じて
「Disable async stack traces」をオンにしてやれば大丈夫そうですかね。
アバター
トリアコンタン
記事: 1637
登録日時: 2015年11月10日(火) 21:13
お住まい: きのこ王国
連絡を取る:

Re: 【解決済み】コンソールを開いているとメモリをドンドンと食われていく…

投稿記事by トリアコンタン » 2019年5月22日(水) 00:06

にゃたま さんが書きました:トリアコンタン様


本記事、すごく勉強になりました。
私も一応プラグインの一部改変などでコードを見る機会が多く、
そのへんの仕組までしらなかったので実行まで待機するのではなく次の処理に移る
(並列処理のようなもの?)ことが可能であることが目から鱗でした。
そういった非同期処理を書いたことがないので折角ですので参考程度に教えてほしいですが
具体例的にはどういったプラグインで使われているのでしょうか?
トリアコンタン様制作のプラグイン群からで構いません。
尚、「Disable async stack traces」をオンにしたうえで
そういった非同期処理を書いたプラグインを実行することで動作が重くなるといった認識でよいのでしょうか?
非同期処理が書いてないものでしたらチェックをつけても動作は遅くならないのですね?
あと、evalは過去に様々なプラグインで見たことあるのですがこれを「Disable async stack traces」
をオンにして使用した場合evalで評価されたされた式にエラーがあったときに
スタックトレースでどのevalにエラーがあったかを出力してくれる感じですかね?
(すみません。自分はそもそもスタックトレースというものを知らなかったオチです…)
逆にチェックをつけないとエラー原因が不明になる感じでしょうか。
ということはぶっちゃけevalは非同期処理に該当するんですね?
色々疑問だらけですみません。
とりあえずは何か原因不明のエラーがある??ってときに状況に応じて
「Disable async stack traces」をオンにしてやれば大丈夫そうですかね。


すみません、ちょっと混同するような書き方になってしまいましたが、正しくは以下の通りです。

1.動作が重くなる原因は非同期処理とは関係なく、直接的な原因はevalという関数です。非同期処理とevalは無関係です。

2.「Disable async stack traces」を「オフにした場合」の恩恵は、非同期処理のスタックトレースを可能にすることです。evalとは直接関係ありませんが、何故か副作用(バグ?)でevalの動作が重くなります。

非同期処理を使ったプラグインですが自作プラグインの中では「自動翻訳プラグイン」などが該当します。
プラグイン関連のトラブルが発生した際の切り分けと報告の方法です。
http://qiita.com/triacontane/items/2e227e5b5ce9503a2c30

[Blog] : http://triacontane.blogspot.jp/
[Twitter]: https://twitter.com/triacontane/
[GitHub] : https://github.com/triacontane/
アバター
にゃたま
記事: 693
登録日時: 2016年1月13日(水) 23:53
お住まい: 床下の猫王国
連絡を取る:

Re: 【解決済み】コンソールを開いているとメモリをドンドンと食われていく…

投稿記事by にゃたま » 2019年5月22日(水) 22:48

トリアコンタン様

すみません。前に記述したことが一部勘違いしていました。
「Disable async stack traces」をオンにすると非同期スタックトレースが有効になると思っていました。
Disableというのは無効って意味ですので逆ですね。
オンにすると非同期スタックトレースが無効になるってことでした。失礼しました。

トリアコンタン さんが書きました:1.動作が重くなる原因は非同期処理とは関係なく、直接的な原因はevalという関数です。非同期処理とevalは無関係です。

evalは非同期処理ではなかったんですか…。すみません、私の思い込みだったようです。

トリアコンタン さんが書きました:2.「Disable async stack traces」を「オフにした場合」の恩恵は、非同期処理のスタックトレースを可能にすることです。evalとは直接関係ありませんが、何故か副作用(バグ?)でevalの動作が重くなります。

即ち非同期スタックトレースが有効のときにevalの動作が重くなるんですね。
これはevalが非同期処理だからということではなく単純にバグなだけということですね。
evalが多く使われているときは非同期スタックトレースは動作遅延になるので使わないほうが良いということで。
evalのバグはコアスクリプトの問題なのかわからないけど早く修正してくれないかな。

“MV:質問” へ戻る