Open keichi2 opened 8 years ago
keichi2様
お世話になっております。 それほどGCが頻発する状況について、初見のため、検証のお時間を頂きたくお願いいたします。 毎フレーム、ヒープが使用されていくとのこと&それがメッシュ関連に使用されているとのことですので、恐らく描画マネージャ機能(Script_SpriteStudio_ManagerDraw)の中の処理で行っている、表示メッシュ群のバッチング処理(CombineMesh)を行っている部分かと推測しております。
また、当方でも似たような状況を起こせるようなシーン構造を検証したいと思っておりますが、もし可能でしたら、それらが起こるサンプルデータ/サンプルシーンなどのご提供をいただけますと、検証にまつわる時間などが節約できるかと思われますので、非常に助かります。 またその際に、 ・ご使用のUnityのバージョン ・動作ターゲットのプラットフォーム種類 の情報もいただけますと、そちらの面からも検証を行うことができるかと思われます。
ご提供いただけます場合、(進行中のプロジェクトなどですと)守秘の必要も出てくるかと思われますため、SpriteStudio5のサポートに、サンプルプロジェクトをZIPなどで圧縮したものを添付していただき、メールにてご送付いただけますようお願い申し上げます。 (また、その際に、SS5Player for UnityのIssue#167の件である旨、本文にご併記いただけますようお願い致します)
お忙しい中、ご迷惑をおかけしているとともに、お手間をおかけして大変申し訳ございませんが、ご検討いただけますと非常に助かります。
何卒今後とも宜しくお願い致します。
検証データについてはこちらのアドレスに送っていただければと思います。 github-spritestudio@webtech.co.jp よろしくお願いいたします。
keichi2様
お世話になっております。 GitHubのdevelopブランチにVer.1.3.5として、グローバルヒープの発生を抑制するように更新したバージョンをアップいたしました。 当該処理(描画マネージャ内MeshCreate関数の処理)を、 ・無駄な配列をヒープしていた ・Meshクラスのメンバでアクセスするとメモリを使用してしまうメンバへのアクセスを減らした(ただ、1箇所、今回では取りきれなかった箇所があります) ……の改変を行うことで、ヒープの使用量が1/5程度に軽減されております。
上記の通り、まだ当該処理でのヒープ使用は完全に0にはできておりませんが、GCの頻度は下がっているはずですので、Ver.1.3.5の適用をご検討下さいますようお願い申し上げます。
今後とも宜しくお願い致します。
追記: 同期Issue : #169
ヒープ周りの改善、ありがとうございます。適用してみたいと思います。
こちらでその後作業を進めていましたところ、原因は不明ですが、ヒープ消費量が減り、GC回数自体には変わりありませんが、一度のGCで回収されるメモリが100MB -> 10MB程度まで減り、処理が停止するようなことはなくなりました。
変更履歴を調査してみたのですが、特に影響のありそうな箇所は見つからず、原因は不明のままですが、現状現象は解消されております。ファイルについて送らせていただきたかったのですが、社内で確認したところ、プロジェクトのファイルを送るにはNDAが必要とのことで、できないようでした。
気持ちは悪いままの状態で申し訳ないのですが、ひとまずクローズいただき、再度何かわかりましたら、新しいチケットにてご連絡させていただきたいと思います。
以上、よろしくお願いいたします。
プロジェクトファイルをお送りするという件、クライアントと相談しまして、御社とクライアントとの間でNDAを締結すればお送りして問題ない、ということとなりました。
本件以外でも、NDAを結んで置いた方がスムーズにご相談できることも多くなりますので 進めさせていただければと思うのですが、続きをメールベースでのご連絡とさせて頂きたく、その場合、どちらにご連絡差し上げればよろしいでしょうか?
NDAの件ですが社内で確認しまして、 お手数ではございますが弊社のSpriteStudio問い合わせフォーム http://www.webtech.co.jp/help/ja/spritestudio/inquiries/
の「OPTPiX SpriteStudio 本体についてのお問い合わせ」「ライセンス、購入、その他に関して」からSS5PlayerForUnityでサンプルプロジェクトを送るためNDAを結びたいという事で問い合わせをしていただけますでしょうか。折り返し担当からご連絡させていただきます。
了解いたしました。ありがとうございます。
現在SpriteStudio5 Playerのver1.3.3を使用しております。 頂点が100程度のキャラクターでフレームごとにヒープが10kb程度ずつ使用されており、30体程度のキャラクターを表示させた場合に、頻繁に(数秒に一度)大きなGCが発生してしまう状況となっています。
見たところ、以下の変数へのアクセスのタイミングでヒープが消費されているようでした。 InstanceMesh.vertices InstanceMesh.triangles
こちら、何か回避方法などないでしょうか? 必要であればサンプルデータなどご提供させていただきます。 お忙しい中申し訳ありませんが、よろしくお願いいたします。