• 【Unity】对象池技术


    尽可能的使用对象池


    【问题】
    创建一个类的实例,内存的分配和消耗,会对程序性能产生影响

    【目的】
    减少内存分配次数
    减少内存碎片
    避免内存卸载的性能损耗

    【问题是如何产生的】
    C#使用垃圾回收机制GC,来回收内存

    C#随意创建类的实例,然后随意丢弃、不使用、空置引用
    导致类实例不断直接或间接引用,不断抛弃,GC就不断处理这些垃圾。
    内存不断地被分配,然后内存不够用,然后GC到处询问和检查(遍历所有已分配的内存),查找哪个类实例被完全弃用了,然后回收掉。
    随着数据量越来越多,GC检查的内容也越多,回收后内存依旧不足,就会不断请求分配新的内存
    造成极大的性能消耗

    其他可能导致GC性能消耗的情况
    new List ,大量使用动态数组
    Dictionary< int ,List > 中的List数组也会被大量抛弃。

    【解决】
    尽可能使用对象池重复利用已经创建的对象,减少内存分配时的消耗,减少内存块的数量,最终减少GC带来的CPU消耗。

    【如何使用对象池】
    创建实例对象,调用对象池,对象池Get
    销毁实例对象,
    移除实例对象,对象池Release

    进一步优化
    在对象池上做预加载:运行之前让对象池中的对象分配多一点内存
    Dictionary预加载,提前将资源内容加载到内存中,可以让后让面创建内存分配减少。
    举个例子:在进入下一个场景之前,做一个转场,提前预加载需要的资源和实例对象。

    对象池管理器PoolManger

  • 相关阅读:
    luming.02无限进步 #我的创作纪念日
    网络层(IP数据报格式、ARP协议)
    Laravel env()为null的问题
    Docker容器化部署企业级应用集群
    day09渗透简单测试流程以及PKI实验
    k线图快速入门必读
    leetcode148. 排序链表
    SQL必会——常见时间数据的处理
    QT学习管理系统
    Mybatis - 预编译的运用和原理
  • 原文地址:https://blog.csdn.net/qq_21407523/article/details/126233247