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
|
|||
|
*/
|
|||
|
}
|
|||
|
}
|
|||
|
}
|