ECS Framework API / IdentifierPool
Class: IdentifierPool
Defined in: ECS/Utils/IdentifierPool.ts:24
世代式ID池管理器
用于管理实体ID的分配和回收,支持世代版本控制以防止悬空引用问题。 世代式ID由索引和版本组成,当ID被回收时版本会递增,确保旧引用失效。
支持动态扩展,理论上可以支持到65535个索引(16位),每个索引65535个版本(16位)。 总计可以处理超过42亿个独特的ID组合,完全满足ECS大规模实体需求。
Example
const pool = new IdentifierPool();
// 分配ID
const id = pool.checkOut(); // 例如: 65536 (版本1,索引0)
// 回收ID
pool.checkIn(id);
// 验证ID是否有效
const isValid = pool.isValid(id); // false,因为版本已递增
Constructors
Constructor
new IdentifierPool(
recycleDelay
,expansionBlockSize
):IdentifierPool
Defined in: ECS/Utils/IdentifierPool.ts:90
构造函数
Parameters
recycleDelay
number
= 100
延迟回收时间(毫秒),默认为100ms
expansionBlockSize
number
= 1024
内存扩展块大小,默认为1024
Returns
IdentifierPool
Methods
checkOut()
checkOut():
number
Defined in: ECS/Utils/IdentifierPool.ts:106
获取一个可用的ID
返回一个32位ID,高16位为世代版本,低16位为索引。
Returns
number
新分配的实体ID
Throws
当达到索引限制时抛出错误
checkIn()
checkIn(
id
):boolean
Defined in: ECS/Utils/IdentifierPool.ts:147
回收一个ID
验证ID的有效性后,将其加入延迟回收队列。 ID不会立即可重用,而是在延迟时间后才真正回收。
Parameters
id
number
要回收的实体ID
Returns
boolean
是否成功回收(ID是否有效且未被重复回收)
isValid()
isValid(
id
):boolean
Defined in: ECS/Utils/IdentifierPool.ts:186
验证ID是否有效
检查ID的索引和世代版本是否匹配当前状态。
Parameters
id
number
要验证的实体ID
Returns
boolean
ID是否有效
getStats()
getStats():
object
Defined in: ECS/Utils/IdentifierPool.ts:197
获取统计信息
Returns
池的当前状态统计
totalAllocated
totalAllocated:
number
已分配的总索引数
totalRecycled
totalRecycled:
number
总计回收次数
currentActive
currentActive:
number
当前活跃实体数
currentlyFree
currentlyFree:
number
当前空闲的索引数
pendingRecycle
pendingRecycle:
number
等待回收的ID数
maxPossibleEntities
maxPossibleEntities:
number
理论最大实体数(设计限制)
maxUsedIndex
maxUsedIndex:
number
当前使用的最大索引
memoryUsage
memoryUsage:
number
内存使用(字节)
memoryExpansions
memoryExpansions:
number
内存扩展次数
averageGeneration
averageGeneration:
number
平均世代版本
generationStorageSize
generationStorageSize:
number
世代存储大小
forceProcessDelayedRecycle()
forceProcessDelayedRecycle():
void
Defined in: ECS/Utils/IdentifierPool.ts:257
强制执行延迟回收处理
在某些情况下可能需要立即处理延迟回收队列, 比如内存压力大或者需要精确的统计信息时。
Returns
void