CTT/Unity/Assets/Model/Module/Message/MessagePool.cs

70 lines
1.5 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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