尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

高效数据结构 - 循环队列

高效数据结构 - 循环队列
📅 发布时间:2026/6/19 3:03:54

循环队列在游戏开发中通常叫做CircularBuffer、RingBuffer,常用来做数据缓存,生产者/消费者模型等。

在UE中有内置这样的数据结构,而Unity的.Net库中恰恰没有。

 

为什么说这样的结构高效,以双下标循环队列为例。配个图:

q2

Tail是尾索引,Head是头部索引。当新元素加入循环队列时,Head索引+1并%取模操作

当加入队列的元素释放时(假如用于对象池),交换元素到尾部索引位置,Tail索引+1并%取模操作

 

我们知道Unity里做对象池通常是栈实现,Unity自己的对象池是List实现。

但是这样的方式都有问题,会导致早期加入池的对象长期不会被操作,CPU侧会导致缓存丢失。

而循环队列在高频率使用时,每个元素都会频繁使用,CPU缓存利用率非常高。

 

即使不是双下标,单下标的循环队列也有缓存利用率高效的特点。双下标则可

模拟生产者/消费者模型,用于多线程Job时检查任务是否完成。

 

UE的CircularBuffer用&与运算代替%取模操作,效率还会更高一些。

 

上代码。

public class CircularBuffer<T> where T : class, new()
{public T[] items;private int _head;private int _tail;public CircularBuffer(int capacity){items = new T[capacity];_head = 0;_tail = 0;for (int i = 0; i < capacity; ++i){items[i] = new T();}}public int Get(){var item = items[_head];_head = (_head + 1) % items.Length;return _head;}public void Release(int index){if (!ReferenceEquals(items[_tail], items[index])){Swap(_tail, index);}_tail = (_tail + 1) % items.Length;}private void Swap(int indexA, int indexB){var temp = items[indexA];items[indexA] = items[indexB];items[indexB] = temp;}
}

 

测试:

  • Stack 顺序测试: 845ms
  • CircularBuffer 顺序测试: 798ms
  • Stack 随机释放测试: 2490ms
  • CircularBuffer 随机释放测试: 2325ms

 

相关新闻

  • 股票技术面分析平台QuantMatrix深度解析 - 实践
  • 【C++实战(64)】C++ 邂逅SQLite3:数据库编程实战之旅 - 教程
  • Gitee本土化战略深度解析:中国开发者生态的合规与效率革命

最新新闻

  • 大连家电维修平台推荐:本地用户实测较好的几家服务商深度对比——2026年6月最新发布 - 一步到家
  • 3步解锁老旧Mac新生命:OpenCore Legacy Patcher终极升级指南
  • 2026宜昌非急救转运救护车TOP5盘点|宜荆荆同城、长江跨江、三峡山地、院区转诊首选康跃转运 - 吉修匠
  • 2026年湖北百合种植基地推荐排行榜:百合技术/百合回收/百合种苗案例参考 - 新闻快传
  • 告别龟速与超时:全方位解决 git clone 网络难题的实战指南
  • 嵌入式MCU电气特性与FLASH操作深度解析:从数据手册到稳定设计

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号