mirror of
https://github.com/GeWuYou/GFramework.git
synced 2026-03-22 10:34:30 +08:00
- 引入 PoolInfo 类来管理对象池的核心数据结构和统计信息 - 添加对象池容量限制功能,超过容量时自动销毁多余对象 - 实现对象池统计功能,跟踪创建、获取、释放、销毁等操作计数 - 新增 GetPoolSize 和 GetActiveCount 方法获取池状态信息 - 添加 SetMaxCapacity 方法设置池的最大容量限制 - 实现 Prewarm 功能用于预创建对象提高性能 - 提供 GetStatistics 方法获取详细的池统计信息 - 添加 IsExternalInit 支持旧版 .NET 框架的 init-only 属性 - 扩展 ArrayPool 添加便捷的扩展方法和自动释放功能 - 新增 StringBuilderPool 提供高性能的字符串构建器复用 - 完善单元测试覆盖新增的所有功能特性
65 lines
2.2 KiB
C#
65 lines
2.2 KiB
C#
namespace GFramework.Core.Abstractions.pool;
|
||
|
||
/// <summary>
|
||
/// 对象池系统接口,定义了对象池的基本操作
|
||
/// </summary>
|
||
/// <typeparam name="TKey">池键的类型</typeparam>
|
||
/// <typeparam name="TObject">池中对象的类型,必须实现IPoolableObject接口</typeparam>
|
||
public interface IObjectPoolSystem<in TKey, TObject>
|
||
where TObject : IPoolableObject
|
||
where TKey : notnull
|
||
{
|
||
/// <summary>
|
||
/// 从对象池中获取一个对象实例
|
||
/// </summary>
|
||
/// <param name="key">对象池的键</param>
|
||
/// <returns>池中的对象实例,如果池中没有可用对象则创建新实例</returns>
|
||
TObject Acquire(TKey key);
|
||
|
||
/// <summary>
|
||
/// 将对象释放回对象池
|
||
/// </summary>
|
||
/// <param name="key">对象池的键</param>
|
||
/// <param name="obj">要释放的对象</param>
|
||
void Release(TKey key, TObject obj);
|
||
|
||
/// <summary>
|
||
/// 清空所有对象池
|
||
/// </summary>
|
||
void Clear();
|
||
|
||
/// <summary>
|
||
/// 获取指定池的当前大小
|
||
/// </summary>
|
||
/// <param name="key">对象池的键</param>
|
||
/// <returns>池中可用对象的数量</returns>
|
||
int GetPoolSize(TKey key);
|
||
|
||
/// <summary>
|
||
/// 获取指定池的活跃对象数量
|
||
/// </summary>
|
||
/// <param name="key">对象池的键</param>
|
||
/// <returns>已被获取但未释放的对象数量</returns>
|
||
int GetActiveCount(TKey key);
|
||
|
||
/// <summary>
|
||
/// 设置指定池的最大容量
|
||
/// </summary>
|
||
/// <param name="key">对象池的键</param>
|
||
/// <param name="maxCapacity">最大容量,超过此容量的对象将被销毁而不是放回池中</param>
|
||
void SetMaxCapacity(TKey key, int maxCapacity);
|
||
|
||
/// <summary>
|
||
/// 预热对象池,提前创建指定数量的对象
|
||
/// </summary>
|
||
/// <param name="key">对象池的键</param>
|
||
/// <param name="count">要预创建的对象数量</param>
|
||
void Prewarm(TKey key, int count);
|
||
|
||
/// <summary>
|
||
/// 获取指定池的统计信息
|
||
/// </summary>
|
||
/// <param name="key">对象池的键</param>
|
||
/// <returns>池的统计信息</returns>
|
||
PoolStatistics GetStatistics(TKey key);
|
||
} |