定义
全局的对象池,不用考虑创建对象池,不用考虑对象的类型,即拿即用,用完归还。
- 全局对象池操作使用PoolEx类
- 注意回收时要自己初始化数据!!!
public static class PoolEx
方法
方法名 | 可见性级别 | 说明 |
---|---|---|
GetGlbalPoolCount<T>() | public | 从对象池中获取对应类型的数组对象 |
SetGlbalPool<T>(ObjectPool<T>) | public | 将数组对象放回对象池 |
GlobalAllocate<T>(IPoolArgs) | public | 全局分配对应类型的对象 |
GlobalAllocate(Type,IPoolArgs) | public | 全局分配对应类型的对象 |
GlobalRecyle<T>(T,IPoolArgs) | public | 全局回收 |
GlobalAllocateArray<T>(int) | public | 获取对应类型和长度的数组对象 |
使用例子
//全局对象池示例
void GlobalPoolExample()
{
//全局获取一个对象
var human = PoolEx.GlobalAllocate<Human>();
//全局回收一个对象
PoolEx.GlobalRecyle(human);
//从全局对象池中获取一个长度为10的数组对象
var arr = PoolEx.GlobalAllocateArray<Human>(10);
//Human类的定义在第一个示例
arr[0] = new Human(33, "吉良吉影");
arr[0].Say();
//回收掉这个数组对象
PoolEx.GlobalRecyle(arr);
//重新从全局对象池中获取长度为10的数组对象
arr = PoolEx.GlobalAllocateArray<Human>(10);
arr[0].Say();
PoolEx.GlobalRecyle(arr);
//可以发现是和原先同样的对象
//因此回收的时候需要注意初始化数据!!!!
}
//示例所需的类
public class Human
{
public readonly int age;
public readonly string name;
public Human(int age, string name)
{
this.age = age;
this.name = name;
}
public Human()
{
age= 0;
name = "无名";
}
public void Say()
{
Console.WriteLine($"我的名字叫{name},{age}岁");
}
}