Skip to content

ECS Framework API v2.1.50


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

typescript
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

Released under the MIT License.