【Unity】A Native Collection has not been disposed, resulting in a memory leak. Enable Full StackTraces to get more details. と出たら… [⇒PCページへ]

2023年04月01日20:06  Unity 写真あり


 久しぶりに UniVRM を 0.108 にアップデートしてみたら、以下のエラーが出るようになった。

A Native Collection has not been disposed, resulting in a memory leak. Enable Full StackTraces to get more details.

 しかし、エラーメッセージはそれだけで、何も情報が出てこない。どうやらメモリーリークしてるようだが、以前は出てなかったので恐らく実装が変わったのだろう。翻訳すると「フルスタックトレースを有効にして詳細を得よ」と書いてあるが、それどこにあるの?ってググってみた。そしたら以下のページが出てきた。

(参考) A Native Collection has not been disposed, Enable Full Stack?

 どうやら Jobs をパッケージマネージャでインストールすれば、メニューに出てくるようだ。やってみたら、詳細のエラーログが出るようになったので、Unity 初心者でもわかるように詳しく手順を書いておこう。

(※) Unity 2020.3.34f1 / Windows11(x64) で確認

1.「Edit>Project Settings...」から「Package Manager」を表示し、「Enable Preview Packages」「Show Dependencies」のチェックをオンにする(※現時点では Jobs が Preview のため。Stable になったら、この手順は必要無くなると思う)。



2.「Window>Package Manager...」を開き、「Unity Registry」にして「Jobs」をインストールする。



3. インストールが終わったら(結構時間かかる)、上部のメニューから「Jobs>Leak Detection>Full Stack Traces (Expensive)」をオンにする(※「Expensive」とあるので、負荷が高くなる=動作が重くなる ので注意)。



 これでエラー時に詳細なスタックトレースが Console に出るようになる。




 私が改修していた UniVRM 0.108 では GltfData がメモリーリークしていたらしい(クラス内部で NativeArray を使ってるっぽいので、Dispose する必要があるのだろう)。using で囲めばエラーは出なくなった。参考ページでは WWW を using で囲ってるね。その手のオブジェクトを疑ってみれば良いだろう。

(参考) A Native Collection has not been disposed, Enable Full Stack?







(関連記事)
【Unity】SymGetSymFromAddr64, GetLastError: '無効なアドレスにアクセスしようとしています。' と出たら…
【Unity】Unity2018 でビルドエラー「CommandInvokationFailure: Gradle build failed.」が出る
【Unity】IncrementalCompiler でのエラー:Unloading broken assembly Packages/com.unity.incrementalcompiler/Editor/Plugins/Unity.PureCSharpTests.dll, this assembly can cause crashes in the runtime
【Unity】【C#】モバイルビルド中の警告:Game scripts or other custom code contains OnMouse_ event handlers.~ を消す
【Unity】InitializeUnityExtensions: Must have a valid path for the plugin [XX] (XX:番号) というエラーの修正方法
【Unity】"~\Temp\Assembly-CSharp.dll.mdb" is denied. と出たら…


関連記事
トラックバックURL

http://fantom1x.blog130.fc2.com/tb.php/426-26f8ed8e

前の記事 次の記事