
开场凌晨两点,Profiler 终于在血量告警的时候弹出了那行刺眼的数字:GPU Memory 4.2G,Texture Memory 2.7G。线上版本跑了三天,内存像吃了膨胀剂一样一路狂飙,GC 触发越来越频繁,玩家开始反馈切场景卡顿、闪退。把开发期的 Debug 工具全关掉,内存依旧下不来——这才是慢性泄漏最恶心的地方:它不会在第一秒爆掉,而是从第一帧开始日拱一卒,等到你发现不对,场景已经被引用链缠成了一团乱麻。这篇文章把这几年踩过的坑和排查思路整理出来,让后来人少走点弯路。一、泄漏的本质与四大高发区1.1 什么是资源泄漏Unity 里的资源泄漏,本质是Native 端对象没人销毁。每个UnityEngine.Object(Texture、Mesh、AudioClip、Material……)都是个"双胞胎":托管堆上有一个很小的 C# wrapper(几十字节),Native(C++)端有真正的资源本体(一张 2048×2048 的 RGBA32 贴图就是 16MB)。这个双胞胎结构带来三条铁律:GC 只认识 wrapper。GC 能回收 C# wrapper,但 Native 本体不归它管——本体只能由Object.Destroy()、Resources.UnloadUnusedAssets()或场景卸载来释放。UnloadUnusedAssets以 wrapper 引用为准。它只回收"已经没有