zxl
/
CTT
forked from Cal/CTT
1
0
Fork 0
CTT/Unity/Assets/Model/Module/Message/MessagePool.cs

70 lines
1.5 KiB
C#
Raw Normal View History

2021-04-08 20:09:59 +08:00
using System;
#if !SERVER
using System.Collections.Generic;
#endif
namespace ET
{
// 客户端为了0GC需要消息池服务端消息需要跨协程不需要消息池
public class MessagePool
{
public static MessagePool Instance
{
get;
} = new MessagePool();
#if !NOT_CLIENT
private readonly Dictionary<Type, Queue<object>> dictionary = new Dictionary<Type, Queue<object>>();
#endif
public object Fetch(Type type)
{
#if !NOT_CLIENT
Queue<object> queue;
if (!this.dictionary.TryGetValue(type, out queue))
{
queue = new Queue<object>();
this.dictionary.Add(type, queue);
}
object obj;
if (queue.Count > 0)
{
obj = queue.Dequeue();
}
else
{
obj = Activator.CreateInstance(type);
}
return obj;
#else
return Activator.CreateInstance(type);
#endif
}
public T Fetch<T>() where T : class
{
T t = (T) this.Fetch(typeof (T));
return t;
}
public void Recycle(object obj)
{
/*
#if !NOT_CLIENT
Type type = obj.GetType();
Queue<object> queue;
if (!this.dictionary.TryGetValue(type, out queue))
{
queue = new Queue<object>();
this.dictionary.Add(type, queue);
}
queue.Enqueue(obj);
#endif
*/
}
}
}