13.缓存池优化:对象上限配置

英伟达A100、H100、A800、H800、H20全面对比:如何为你的AI项目选择最佳GPU? 本文全面对比了英伟达A100、H100、A800、H800和H20等GPU的核心参数与性能表现,帮助AI项目开发者根据训练与推理需求选择最佳硬件方案。从架构差异到实际应用场景,详细分析了各型号在算力、显存带宽及成本效益方面的优劣,并提供了部署优化建议,助力提升AI项目效率与性价比。 阅读详情

一、本课目标

Lesson13 通过 GetObj 的参数设置对象数量上限:

PoolMgr3.Instance.GetObj("Prefabs/Cube", 5);

这种方式要求调用者每次获取对象时都知道并传入正确的上限。Lesson14 将最大数量配置放到预制体自身,让每种对象独立保存自己的配置:

PoolMgr4.Instance.GetObj("Prefabs/Cube");

缓存池创建对象时读取预制体上的 PoolObj.MaxNum,调用者只需要提供资源路径。

二、为什么把上限配置放到对象上

不同类型的对象通常需要不同的数量上限,例如:

对象类型建议上限原因
子弹50生成频率高、生命周期短
敌人20同屏数量有限,但单个对象开销较大
爆炸特效10存在时间短,可重复利用

如果由调用者传入上限,同一种对象可能在不同位置得到不同配置。把配置保存在预制体上具有以下优点:

  • 配置与对象放在一起,更容易查找和修改。
  • 每种预制体可以拥有独立的最大数量。
  • 获取对象的接口更简单,不需要重复传入 maxNum。
  • 策划或开发者可以直接在 Inspector 中调整数值。

三、PoolObj 配置组件

PoolObj 是挂载在缓存对象预制体上的配置脚本:

using UnityEngine;

public class PoolObj : MonoBehaviour
{
    public int MaxNum = 5;
}

MaxNum 表示这一类对象最多允许同时创建多少个实例。因为它是公共字段,所以可以直接在 Unity Inspector 中修改。

本课中的 Cube.prefab 已挂载 PoolObj,并将 MaxNum 设置为 5。

四、使用步骤

  1. 选中需要放入缓存池的预制体。
  2. 为预制体添加 PoolObj 组件。
  3. 在 Inspector 中设置 Max Num。
  4. 为对象添加对应的自动回收脚本,例如 HideMe4。
  5. 通过 PoolMgr4.Instance.GetObj(resourcePath) 获取对象。

示例:

if (Input.GetMouseButtonDown(0))
{
    PoolMgr4.Instance.GetObj("Prefabs/Cube");
}

资源必须位于 Resources 文件夹下。传入的是相对路径,不需要扩展名。Unity 中推荐使用正斜杠:

PoolMgr4.Instance.GetObj("Prefabs/Cube");

五、读取对象上限配置

PoolMgr4.CreateObj 在实例化对象后获取它的 PoolObj 组件:

private GameObject CreateObj(string name)
{
    GameObject prefab = Resources.Load<GameObject>(name);
    if (prefab == null)
    {
        Debug.LogError($"Resources 中没有找到对象:{name}");
        return null;
    }

    GameObject obj = Object.Instantiate(prefab);
    PoolObj poolObj = obj.GetComponent<PoolObj>();

    if (poolObj != null)
    {
        maxNum = poolObj.MaxNum;
    }
    else
    {
        Debug.LogError("缓存池物体没有挂载 PoolObj");
        return null;
    }

    obj.name = name;
    return obj;
}

处理流程如下:

加载并实例化预制体
        ↓
获取 PoolObj 组件
        ↓
读取 MaxNum
        ↓
保存资源路径作为对象名称
        ↓
返回创建完成的对象

如果预制体没有挂载 PoolObj,管理器会输出错误并返回 null。因此,所有交给 PoolMgr4 创建的预制体都必须添加该组件。

六、获取对象时的四种情况

PoolMgr4.GetObj 不再接收 maxNum 参数,而是使用从 PoolObj 中读取的配置:

public GameObject GetObj(string name)

获取对象时分为四种情况:

情况处理方式
对应的对象池还不存在创建第一个对象和对应的 PoolData3
存在空闲对象从 objStack 中取出并复用
没有空闲对象,但未达到 MaxNum创建新对象并加入 usedList
没有空闲对象,并且达到 MaxNum复用 usedList 中最早使用的对象

核心判断:

if (poolData.Count > 0)
{
    return poolData.Pop();
}

if (poolData.UsedCount < maxNum)
{
    GameObject newObj = CreateObj(name);
    poolData.PushUsedList(newObj);
    return newObj;
}

return poolData.Pop();

这样可以保证对象数量达到上限后不再继续实例化。

七、PoolData3 的职责

PoolData3 管理同一类型对象的空闲状态和使用顺序:

public Stack<GameObject> objStack = new();
private List<GameObject> usedList = new();

public int Count => objStack.Count;
public int UsedCount => usedList.Count;
  • objStack:保存已经回收、当前空闲的对象。
  • usedList:按开始使用的先后顺序保存正在使用的对象。
  • Count:空闲对象数量。
  • UsedCount:使用中对象数量。

达到数量上限且没有空闲对象时,会取出 usedList[0],也就是使用时间最久的对象:

obj = usedList[0];
usedList.RemoveAt(0);
usedList.Add(obj);

将它重新添加到列表尾部,表示该对象开始了新一轮使用。

八、对象回收

HideMe4 在对象启用两秒后将其归还给 PoolMgr4:

public class HideMe4 : MonoBehaviour
{
    private void OnEnable()
    {
        Invoke(nameof(HideSelf), 2f);
    }

    private void HideSelf()
    {
        PoolMgr4.Instance.PushObj(gameObject);
    }
}

回收时,PoolData3.Push 会:

  1. 将对象设置为不激活状态。
  2. 开启布局功能时,将对象移动到对应的分类节点下。
  3. 把对象压入空闲栈 objStack。
  4. 从使用列表 usedList 中移除。

九、完整生命周期

首次获取
  ↓
创建对象并读取 PoolObj.MaxNum
  ↓
加入 usedList
  ↓
对象开始使用
  ↓
调用 PushObj 回收
  ↓
从 usedList 移除并压入 objStack
  ↓
再次获取时从 objStack 取出

达到数量上限后的流程:

objStack 为空
  ↓
UsedCount >= MaxNum
  ↓
取出 usedList[0]
  ↓
移动到列表尾部
  ↓
重新使用,不再创建新对象

十、与 Lesson13 的区别

对比项Lesson13Lesson14
上限来源调用 GetObj 时传入从预制体的 PoolObj 读取
调用方式GetObj(path, maxNum)GetObj(path)
配置位置调用代码预制体 Inspector
调整方式修改调用参数修改 PoolObj.MaxNum
调用者职责知道对象上限只需要知道资源路径

十一、注意事项

  • MaxNum 应设置为大于 0 的数值,否则对象池无法正常扩充。
  • 每个通过 PoolMgr4 创建的预制体都必须挂载 PoolObj。
  • 对象回收脚本必须调用 PoolMgr4,不能混用 lesson12 或 lesson13 的管理器。
  • 对象名称会被改为资源路径,用作 poolDic 的键,不要在使用期间随意修改。
  • 达到上限后会抢占最早使用的对象,因此每次获取后都应重新设置位置、旋转、动画等运行状态。
  • 当前 maxNum 是 PoolMgr4 的共享字段,适合本课单一预制体测试。若同时管理多种不同上限的对象,更合理的做法是把上限保存在各自的 PoolData3 中。
云上深度学习训练避坑指南:环境、数据与复现的完整逻辑链 深度学习模型训练在云端并非简单迁移,而涉及计算资源调度、CUDA驱动与框架版本协同、分布式数据加载及结果可复现性等系统性问题。其核心原理在于:GPU加速依赖底层驱动(如NVIDIA 525)、CUDA Toolkit与PyTorch编译版本的严格匹配;数据需脱离本地路径,通过S3/GCS等对象存储实现统一URI访问;训练过程必须参数化、带唯一运行ID并自动保存检查点。这类技术实践显著提升工程效率与成本可控性,广泛应用于猫狗分类、图像识别等中小规模AI项目。本文聚焦新手最易卡壳的三大环节——环境重建失败、数据 阅读详情

相关推荐

OpenClaw:深度学习驱动的智能编程工具实战解析

智能编程工具通过深度学习技术革新传统开发流程,其核心在于代码语义理解与实时协作能力。这类工具采用AI代码补全、错误预测等技术,显著降低开发者认知负荷,尤其适用于复杂业务逻辑开发和遗留系统维护场景。以OpenClaw为例,其智能填充和上下文感知功能可提升40%编码效率,减少65%调试时间。关键技术实现包含自然语言处理、代码静态分析等,在金融科技、电商系统等领域具有广泛应用前景。热词提示:代码理解引擎、智能工作流整合展现了当前AI辅助开发的最新趋势。

chubaisheng8627的博客 320

vLLM推理服务冷启动优化:预热机制原理与实战配置指南

在大语言模型推理服务部署中,冷启动延迟是影响用户体验和资源效率的关键瓶颈。其核心原理在于首次推理请求需要承担KV缓存池初始化、计算图即时编译等一次性开销。通过预热机制,可以提前驱动推理引擎完成这些初始化流程,将关键组件置于“热”状态,从而显著降低首个请求的响应时间。这项技术对于提升服务的响应速度和稳定性具有重要价值,尤其适用于流量存在波峰波谷、服务需要弹性伸缩的生产场景。本文以vLLM推理引擎为例,深入解析其冷启动问题的根源,并详细阐述如何通过配置预热参数来模拟真实请求,有效优化KV缓存分配和计算内核编译,

weixin_34101784的博客 371

Cadence16.6安装教程

如需安装所需的软件,请到文章末尾处查看 安装步骤: 安装前先关闭杀毒软件和360卫士,注意安装路径不能有中文,安装包路径也不要有中文。 试装系统:win10 64bit 1.解压安装包(共5个压缩包,每个都要解压) 2.以管理员身份运行安装程序。 3.选择License Manager。 4.点击NEXT。 5.选择I accept,然后点击NEXT。 6.选择License Manage...

谢谢关注“小鱼教你模数电”,各平台同号 8万+

案例分析:池化对象的应用场景13

在我们平常的编码中,通常会将一些对象保存起来,这主要考虑的是对象的创建成本。比如像线程资源、数据库连接资源或者 TCP 连接等,这类对象的初始化通常要花费比较长的时间,如果频繁地申请和销毁,就会耗费大量的系统资源,造成不必要的性能损失。并且这些对象都有一个显著的特征,就是通过轻量级的重置工作,可以循环、重复地使用。这个时候,我们就可以。在 Java 中,应用非常广泛,常见的就有数据库连接池、线程池等,本节课主讲连接池,线程池我们将在 12 课时进行介绍。

xiaoxu2022xiaoxu的博客 2917

Moveit +Gazebo:搭建单臂机械臂仿真平台

Moveit +Gazebo:搭建单臂机械臂仿真平台

magic_invaid的博客 5288

NMOS管和PMOS管做开关控制电路

NMOS管和PMOS管做开关控制电路

while(1) 3万+

Python遥感数据处理效率提升370%的7个隐藏技巧(Rasterio+Dask+Zarr内存优化黑科技首次公开)

提升Python卫星遥感数据解析工具处理效率达370%,适用于大规模栅格分析场景。融合Rasterio读取、Dask并行计算与Zarr内存优化三大黑科技,显著降低内存占用、加速I/O与计算。方法经实测验证,支持多时相、高分辨率影像批处理,值得收藏。

InstrIsle的博客 235

[RK-Linux] 移植Linux-5.10到RK3399(十)| 配置AP6256模组使能WIFI、BT功能

[RK-Linux] 移植Linux-5.10到RK3399(十)| 配置AP6256模组使能WIFI、BT功能

Systemcall名屋 2978

PyTorch显存不足怎么办?从定位到优化,一套完整排查方案

深度学习模型训练过程中,GPU显存与系统内存的管理是决定训练稳定性的关键环节。理解PyTorch的内存分配机制,掌握区分显存与内存瓶颈的排查方法,是高效利用硬件资源的前提。通过梯度累积、混合精度训练、DataLoader参数调优等实用技术,可以显著降低训练过程的显存峰值,避免CUDA out of memory错误。这些优化手段广泛适用于从图像分类到大规模Transformer的各类深度学习应用场景,能够帮助开发者搭建更健壮的训练流程。本文基于真实项目经验,系统梳理了从内存瓶颈定位到环境配置调整的完整思路,

weixin_34192816的博客 396

微信小程序爬虫终极指南:以电商小程序抓包与逆向分析为例(最新版)

在2026年的移动互联网生态中,微信小程序已经成为电商交易的核心载体之一。据统计,超过78%的头部电商平台都推出了微信小程序版本,其用户活跃度甚至超过原生App。对于数据从业者而言,小程序端往往藏着比Web端更丰富的接口数据——包括但不限于商品详情、价格波动、用户评价、库存变化、秒杀活动信息等。与传统的Web爬虫不同,微信小程序爬虫面临着三大核心挑战无URL地址栏:无法通过浏览器直接查看网络请求wx.request封装:所有请求均通过微信原生API发起,难以直接拦截然而,

2201_76125261的博客 536

2、OTA/gm - C滤波器的架构与设计

本文深入探讨了OTA/gm-C滤波器的两种主要设计方法:基于LC梯形网络的设计与多环反馈(MLF)结构。前者包括元件替代法和信号模拟法,分别通过电感替代或电路方程模拟实现低敏感度滤波器;后者通过积分器级联与反馈网络合成全极点或含任意传输零点的传递函数。文中详细分析了不同结构如IFLF和LF的反馈矩阵、传递函数及性能差异,指出LF结构在敏感度、噪声和整体性能上的优势。同时比较了各类方法的优缺点及适用场景,为高频连续时间集成电路滤波器的设计提供了系统性指导。

fanta的博客 136

施瓦茨高性能mysql_第六章 优化服务器设置--高性能MySQL 施瓦茨--读书笔记

MySql的默认配置不适用于使用大量资源,因为其通用性很高。不要期望改变配置文件会带来巨大的性能提升。提升大小取决于工作负载,通常可以通过选择适当的配置参数得到两到三倍的性能提升。在这时候,性能提升就是增量的。为了更大得提升,通常要检查服务器架构,查询及应用程序的架构。6.1配置基础知识1 首先要知道MySQL从什么地方获取配置信息。(可以用启动脚本 --defaults-file=配置文件位置)...

weixin_34584899的博客 158

PCL DBSCAN密度聚类【2026最新版】

点云密度聚类的PCL代码实现,与matlab自带的密度聚类算法进行对比验证,结果一致。3万多个点能再2秒左右运行出结果,算法效率尚可。

点云侠的博客 5681

Java 21 + GraalVM 24.1内存优化新纪元:ZGC for Native Image实验数据首曝,RSS降低41%,但仅限这3类服务!

Java GraalVM静态镜像内存优化新突破:基于Java 21与GraalVM 24.1,ZGC首次集成Native Image,RSS降低41%。仅适用于无反射/动态代理、低JIT依赖、启动后负载稳定的三类服务。融合高级开发技巧实现极致内存瘦身,值得收藏。

FuncWander的博客 320

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Android校招笔试复盘:系统原理与构建工具链考点精讲

Android系统原理与构建工具链是开发者提升工程能力的关键。Binder作为Android独有的IPC机制,通过一次拷贝实现高效跨进程通信;AMS统一管理组件生命周期,支撑起startActivity背后的复杂调度。而AGP与Gradle的版本对应关系,例如Android Studio Hedgehog对应AGP 8.2,则直接影响构建效率与兼容性。在Android 13及分区存储普及后,FileProvider的content:// URI授权成为跨应用共享文件的标准方案。从底层机制到构建配置,深入理解

weixin_33895516的博客 399

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

75GB内存机器本地运行Qwen3.8-Flash:内存优化与部署实战

大模型推理通常被视为GPU的专属领域,但通过合理的内存管理与量化技术,普通大内存工作站同样可以胜任。理解模型权重、KV Cache与框架开销的内存占用原理,是本地部署的基础。量化(如GGUF、INT4)和上下文长度调整能显著降低资源需求,让模型在CPU环境下流畅运行。这为数据安全、离线推理和成本敏感场景提供了高价值解决方案,例如企业内部文档问答、代码生成与边缘计算。本文以Qwen3.8-Flash为例,详细演示在约75GB内存机器上,通过Ollama、llama.cpp和Transformers进行本地部署

weixin_34095889的博客 378

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

第六章 优化服务器设置--高性能MySQL 施瓦茨--读书笔记

MySql的默认配置不适用于使用大量资源,因为其通用性很高。 不要期望改变配置文件会带来巨大的性能提升。提升大小取决于工作负载,通常可以通过选择适当的配置参数得到两到三倍的性能提升。在这时候,性能提升就是增量的。为了更大得提升,通常要检查服务器架构,查询及应用程序的架构。 6.1配置基础知识   1 首先要知道MySQL从什么地方获取配置信息。(可以用启动脚本 --defaults-file...

weixin_30648963的博客 106

FasterTransformer源码解析:GPU推理加速的核心优化与实践

大模型推理的性能瓶颈常源于显存分配、算子调度和内存管理效率的不足。掌握底层推理引擎的设计原理,是优化服务延迟与吞吐的关键。KV Cache的复用策略、Kernel融合减少显存往返、低精度量化降低资源占用,这些技术共同构成了现代推理加速的基石。FasterTransformer作为NVIDIA开源的推理内核,以其手写CUDA算子、内存池化、多卡并行等机制,为高并发场景提供了教科书级的参考实现。通过解析其源码架构,不仅能理解性能优化的本质,还能在实际部署中避开显存管理、版本兼容等典型陷阱。结合与vLLM、Ten

weixin_33805743的博客 507

Android内存管理与性能优化面试真题

概念解析:LRU算法的⼯程实现 LruCache(Least Recently Used,最近最少使⽤)是Android提供的⼀个核⼼缓存⼯具类。它的设计理念⾮常符合⼈类直觉:“如果⼀个数据最近被访问过,那么它在未来被访问的概率12 / 38极⾼;反之,如果⼀个数据很久没被碰过,当内存吃紧时,它就应该第⼀个被踢出局。” 在源码层⾯,LruCache 的底层⼼脏是⼀个 LinkedHashMap。

qq_52269550的博客 689

从零搭建大语言模型预训练平台:架构设计、部署与优化实战

在深度学习领域,大语言模型(LLM)的预训练是核心技术之一,其核心原理是通过海量无标注文本数据,基于Transformer架构进行自监督学习,使模型掌握语言的深层规律与知识表示。这项技术的核心价值在于能够构建通用的语言理解与生成能力,为下游任务提供强大的基础模型。在实际工程应用中,自建预训练平台成为许多团队追求数据主权、成本可控与极致定制化的关键选择。平台构建涉及硬件选型、分布式系统、容器化部署与训练框架集成等多个层面,其中**分布式训练**和**模型并行**是实现千亿参数大模型训练的核心技术手段。通过合理

weixin_30437847的博客 323

对标MinIO的分布式存储新系统:小文件性能优化与元数据分离实践

分布式存储作为海量非结构化数据的基础设施,始终面临小文件性能、元数据扩展与运维复杂度的三重挑战。对象存储与分布式文件系统的边界在实践中日渐模糊,用户既需要S3兼容的通用访问接口,也渴望获得文件系统级的目录操作与数据管理能力。本文从存储架构演进的角度,解析元数据与数据分离的设计原理,以及日志结构合并写入对随机小IO的优化价值,并实测一款对标MinIO的新兴存储系统。通过部署集群、压测对比与Spring Boot集成实践,展示其在千万级小文件场景下的吞吐提升与延迟改善,同时客观分析仍适合继续使用MinIO的边界

weixin_33966095的博客 297

oracle vue考试,华为认证Vue考试|HCIE-Storage V2.0模拟试题

HCIE-Storage V2.0模拟试题1.(单选)以下哪些场景不会触发OceanStor V3进行硬盘的恢复重构。A.系统管理员在更换故障盘时误将正常运行的硬盘拔出,但及时发现错误操作并在两分钟之内将硬盘插回。B.硬盘重构过程中将其插回。C.硬盘做在线诊断后恢复。D.硬盘故障后,系统管理员及时发现故障盘,并及时将故障盘替换为新硬盘。2.(单选)在OceanStor V3存储系统中,为Oracl...

weixin_31463675的博客 854

DeepSpeed Zero-3 实战指南:参数分区与按需访问如何解决大模型训练 OOM

DeepSpeed 是面向分布式训练与推理的深度学习优化库,其核心能力之一 Zero-3(ZeRO Stage 3)将参数、梯度和优化器状态全部切分到各数据并行进程,让单卡装不下完整模型时,大模型训练 OOM 不再是死局。本文带你读源码级的机制:参数是怎么"按需借来、用完即还"的,以及生产配置该怎么调。 ## 大模型训练 OOM 现场:GPU 显存到底花在哪了 先还原一个典型事故:70B 参数

gitblog_00053的博客 401

PyTorch显存管理真相:从OOM到95%利用率的实战指南

GPU显存不是静态物理资源,而是由NVIDIA驱动、CUDA运行时和PyTorch CachingAllocator共同构成的分层虚拟内存系统。理解`memory_allocated()`与`memory_reserved()`的本质差异,是突破显存瓶颈的第一步;掌握`PYTORCH_CUDA_ALLOC_CONF`配置与`torch.cuda.memory_summary()`监控,可精准调控缓存行为、降低碎片率;结合INT4量化、Flash Attention和梯度累积等模型级优化手段,能在不升级硬件前

weixin_34267123的博客 394

GoldenDB参数调优指南:生产环境必须关注的20个参数

GoldenDB的参数很多,但80%的问题出在20%的参数上。最常踩坑的5个参数—— 内存太小—— 连接数不够—— 刷盘策略不对—— 并发受限—— 同步模式选错把这5个搞明白,能解决你80%的问题。

sjkflw121150的博客 242

3 步完成 HMCL 主题定制:内置主题色、背景图与自定义颜色值完整指南

默认的启动器界面用上一阵子,难免看腻:一样的蓝白色调、同一张内置壁纸、一成不变的字体。其实 HMCL(跨平台的 Minecraft 启动器)内置了相当完整的主题定制系统——主题色、背景图、字体,甚至标题栏和窗口透明度,都能在"设置"里的"个性化"页面直接调。这篇文章按"先挑色、再换背景、最后用颜色值微调"的顺序,带你走完 HMCL 主题定制,再补上几个不容易发现的细节。 ## 分步实操:三步调好

gitblog_00161的博客 314
上一篇: 12.缓存池优化:对象上限
下一篇: 14.事件中心:主要作用和原理
Unity黑马王子
博客等级 码龄4年 1846粉丝 181原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值