如果 unity 老是报错: A Native Collection has not been disposed, resulting in a memory leak. Enable Full StackTraces
此时需要打开泄漏检查的全堆栈显示(比较耗费性能,平时不要打开)
方法如下:在Editor中加入一个类文件,内容如下:
using System.Linq;
using System.Collections;
using UnityEngine;
using UnityEditor;
using Unity.Collections;
namespace Assets.Scripts.Editor
{
public class MyJob
{
[MenuItem("Custom/MyJobs/Show Leak Detection Mode")]
static void ShowLeakDetection()
{
EditorUtility.DisplayDialog("内存泄漏检测设置", string.Format("NativeLeakDetection.Mode:{0}", NativeLeakDetection.Mode.ToString()), "OK");
}
[MenuItem("Custom/MyJobs/Leak Detection Enabled")]
static void LeakDetectionEnabled()
{
NativeLeakDetection.Mode = NativeLeakDetectionMode.Enabled;
}
[MenuItem("Custom/MyJobs/Leak Detection Enabled", true)] //第二个参数表示本函数是菜单是否可用的验证函数
static bool ValidateLeakDetectionEnabled()
{
return NativeLeakDetection.Mode != NativeLeakDetectionMode.Enabled;
}
[MenuItem("Custom/MyJobs/Leak Detection Enabled With StackTrace")]
static void LeakDetectionEnabledWithStackTrace()
{
NativeLeakDetection.Mode = NativeLeakDetectionMode.EnabledWithStackTrace;
}
[MenuItem("Custom/MyJobs/Leak Detection Enabled With StackTrace", true)] //第二个参数表示本函数是菜单是否可用的验证函数
static bool ValidateLeakDetectionEnabledWithStackTrace()
{
return NativeLeakDetection.Mode != NativeLeakDetectionMode.EnabledWithStackTrace;
}
[MenuItem("Custom/MyJobs/Leak Detection Disable")]
static void LeakDetectionDisable()
{
NativeLeakDetection.Mode = NativeLeakDetectionMode.Disabled;
}
[MenuItem("Custom/MyJobs/Leak Detection Disable", true)] //第二个参数表示本函数是菜单是否可用的验证函数
static bool ValidateLeakDetectionDisable()
{
return NativeLeakDetection.Mode != NativeLeakDetectionMode.Disabled;
}
}
}
这样就给Unity编辑器的菜单里增加 Custom/MyJobs 菜单,可随时启用、禁用内存检测。
参考来源: 【修复】A Native Collection has not been disposed, resulting in a memory leak._VirtualCreator的博客-优快云博客