内存池模块是 TEngine 框架中的轻量级内存管理工具,相对于对象池更适合一些更抽象、碎片化的内存对象。内存池通过对象复用机制,减少内存分配和 GC 压力,提升游戏性能。
-
🚀 轻量级设计
- 极小的内存占用
- 快速的对象获取和释放
- 适合高频创建/销毁的场景
-
🔄 自动对象复用
- 对象获取时自动从池中取出
- 对象释放时自动回收到池中
- 减少内存分配和 GC 压力
-
🛡️ 内存泄漏检测
- Scene 窗口 MemoryPool 对象可以设置内存池检查
- 防止回收问题与内存泄漏问题
要实现内存池管理的对象,需要实现 IMemory 接口:
/// <summary>
/// 资源组数据。
/// <remarks>实现 IMemory 接口,支持内存池管理。</remarks>
/// </summary>
public class AssetGroup : IMemory
{
public List<AssetHandle> Assets { get; set; }
/// <summary>
/// 清理内存对象。
/// </summary>
public void Clear()
{
if (Assets != null)
{
foreach (var asset in Assets)
{
asset?.Dispose();
}
Assets.Clear();
}
}
}// 从内存池中获取/生成内存对象
AssetGroup assetGroup = MemoryPool.Acquire<AssetGroup>();
// 使用对象
assetGroup.Assets = new List<AssetHandle>();
// ... 使用 assetGroup
// 释放内存对象还给内存池
MemoryPool.Release(assetGroup);/// <summary>
/// 从内存池获取对象。
/// </summary>
/// <typeparam name="T">对象类型(必须实现 IMemory 接口)。</typeparam>
/// <returns>内存对象实例。</returns>
T Acquire<T>() where T : class, IMemory, new();
/// <summary>
/// 释放对象回内存池。
/// </summary>
/// <param name="obj">要释放的对象。</param>
void Release(IMemory obj);- ✅ 频繁创建/销毁的小对象
- ✅ 数据结构对象(如 List、Dictionary 的包装类)
- ✅ 临时数据对象
- ✅ 事件参数对象
- ❌ 大型对象(占用内存较大)
- ❌ 需要复杂初始化的对象
- ❌ 生命周期很长的对象
// ✅ 推荐:在 Clear 方法中正确清理所有资源
public class MyData : IMemory
{
public List<int> Data { get; set; }
public void Clear()
{
Data?.Clear();
Data = null;
}
}在 Scene 窗口的 MemoryPool 对象可以设置内存池检查:
- 启用内存泄漏检测
- 设置检测间隔
- 查看当前内存池状态
