70 lines
1.5 KiB
C#
70 lines
1.5 KiB
C#
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
|
||
*/
|
||
}
|
||
}
|
||
} |