参考链接:
https://www.cnblogs.com/zblade/p/6445578.html
http://www.manew.com/thread-101174-1-1.html
gc是代码层面上的,分为lua的gc和c#的gc
lua:注意table的使用,例如为了减少lua和c#的交互,会在lua层上用table来实现Vector3,这时如果在update中进行Vector3运算就会大量地分配Vector3
c#:注意装箱操作,还有方法的返回,例如如果方法返回的是一个数组,那么说明执行这个方法时会分配内存产生一个新的数组,从而产生gc
以下都是测试过的:
1.GameObject.name和GameObject.tag会产生gc,替代方案为GameObject.CompareTag
2.Input.touches会产生gc,替代方案为Input.touchCount配合Input.GetTouch
3.Physics.SphereCastAll会产生gc,替代方案为Physics.SphereCastNonAlloc
从2和3可以看出,如果方法返回的是一个数组,那么说明执行这个方法时会分配内存产生一个新的数组,从而产生gc
4.装箱操作(值类型转化为引用类型)会产生gc,典型的例子为Debug.Log,其方法签名是public static void Log(object message);
5.StartCoroutine会产生gc
6.yield return 0会产生gc(因为装箱操作),替代方案为yield return null
7.yield return new WaitForSeconds(0.1f)会产生gc(因为new一个对象),替代方案为:
WaitForSeconds waitForSeconds = new WaitForSeconds(0.1f); IEnumerator A() { while (true) { yield return waitForSeconds; } }
8.foreach几乎不会产生gc(unity5.5版本修复了,但第一次执行foreach仍会触发gc)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?