要减少GC就要减少堆内存分配的频繁度和减少内存分配的大小。
一般性我们用得多的也就是各种池处理和缓存字典。
我自己总结在Unity里用到缓存的地方:
- Class pool:网络PB类等
- List pool:各种中间列表,用完即删的List
- Unity game object pool:缓存各种游戏中的Object、减少Instance次数,如名字板、血条、当前场景怪
- Class internal cache:类内部临时变量或者字典结构;使用的个数很少,这样写起来快也更直观,不依赖其它结构
- Resource cache:bundle及已经加载的音频、图片等资源的缓存及释放
对于音频资源,使用某个音频之后是否会接着使用,这个是不确定的。这时我们可以使用一些置换算法来达到一个比较好的缓存效果。
1. LRU;这个算法比较成熟,就是最近的最长时候没有使用到的那一个。
2. LFU;这个算法的实现有些变体。就是既统计时间也统计次数,在这当中取一个平衡值

本文介绍了在Unity开发中减少垃圾收集(GC)的方法,包括使用各种池技术和缓存策略来降低堆内存分配频率和大小。文中详细列举了Classpool、Listpool等具体应用场景,并探讨了资源缓存策略,例如LRU和LFU算法。

1万+

被折叠的 条评论
为什么被折叠?



