提交 268135c1 编写于 作者: T tanghai

客户端为了0GC需要消息池,服务端消息需要跨协程不能有消息池

上级 9beff5f6
......@@ -17,6 +17,12 @@
</PropertyGroup>
<ItemGroup>
<Compile Remove="Libs\**" />
<Compile Include="..\..\Unity\Assets\Scripts\Module\Message\MessagePool.cs">
<Link>Module\Message\MessagePool\ETModel\MessagePool.cs</Link>
</Compile>
<Compile Include="..\..\Unity\Hotfix\Module\Message\MessagePool.cs">
<Link>Module\Message\MessagePool\ETHotfix\MessagePool.cs</Link>
</Compile>
<EmbeddedResource Remove="Libs\**" />
<None Remove="Libs\**" />
</ItemGroup>
......@@ -87,7 +93,6 @@
<Compile Include="..\..\Unity\Assets\Scripts\Module\Message\MessageAttribute.cs" Link="Module\Message\MessageAttribute.cs" />
<Compile Include="..\..\Unity\Assets\Scripts\Module\Message\MessageHandlerAttribute.cs" Link="Module\Message\MessageHandlerAttribute.cs" />
<Compile Include="..\..\Unity\Assets\Scripts\Module\Message\MessageInfo.cs" Link="Module\Message\MessageInfo.cs" />
<Compile Include="..\..\Unity\Assets\Scripts\Module\Message\MessagePool.cs" Link="Module\Message\MessagePool.cs" />
<Compile Include="..\..\Unity\Assets\Scripts\Module\Message\NetworkComponent.cs" Link="Module\Message\NetworkComponent.cs" />
<Compile Include="..\..\Unity\Assets\Scripts\Module\Message\Network\AChannel.cs" Link="Module\Message\Network\AChannel.cs" />
<Compile Include="..\..\Unity\Assets\Scripts\Module\Message\Network\AService.cs" Link="Module\Message\Network\AService.cs" />
......@@ -116,7 +121,6 @@
<Compile Include="..\..\Unity\Assets\Scripts\Other\AppType.cs" Link="Other\AppType.cs" />
<Compile Include="..\..\Unity\Hotfix\Module\Message\HotfixMessage.cs" Link="Module\Message\HotfixMessage.cs" />
<Compile Include="..\..\Unity\Hotfix\Module\Message\HotfixOpcode.cs" Link="Module\Message\HotfixOpcode.cs" />
<Compile Include="..\..\Unity\Hotfix\Module\Message\MessagePool.cs" Link="Module\Message\MessagePool\MessagePool.cs" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="CommandLineParser" Version="2.2.1" />
......
......@@ -3,48 +3,60 @@ using System.Collections.Generic;
namespace ETModel
{
public class MessagePool
{
public static MessagePool Instance { get; } = new MessagePool();
private readonly Dictionary<Type, Queue<object>> dictionary = new Dictionary<Type, Queue<object>>();
public object Fetch(Type type)
{
Queue<object> queue;
if (!this.dictionary.TryGetValue(type, out queue))
{
queue = new Queue<object>();
this.dictionary.Add(type, queue);
}
object obj;
// 客户端为了0GC需要消息池,服务端消息需要跨协程不需要消息池
public class MessagePool
{
public static MessagePool Instance { get; } = new MessagePool();
#if !SERVER
private readonly Dictionary<Type, Queue<object>> dictionary = new Dictionary<Type, Queue<object>>();
#endif
public object Fetch(Type type)
{
#if !SERVER
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);
obj = Activator.CreateInstance(type);
}
return obj;
}
public T Fetch<T>() where T: class
return obj;
#else
return Activator.CreateInstance(type);
#endif
}
public T Fetch<T>() where T : class
{
T t = (T) this.Fetch(typeof(T));
T t = (T) this.Fetch(typeof (T));
return t;
}
public void Recycle(object obj)
{
Type type = obj.GetType();
Queue<object> queue;
if (!this.dictionary.TryGetValue(type, out queue))
{
queue = new Queue<object>();
public void Recycle(object obj)
{
#if !SERVER
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);
}
}
}
queue.Enqueue(obj);
#endif
}
}
}
\ No newline at end of file
......@@ -62,8 +62,13 @@ namespace ETModel
return this.opcodeTypes.GetValueByKey(opcode);
}
// 客户端为了0GC需要消息池,服务端消息需要跨协程不需要消息池
public object GetInstance(ushort opcode)
{
#if SERVER
Type type = this.GetType(opcode);
return Activator.CreateInstance(type);
#endif
return this.typeMessages[opcode];
}
......
......@@ -3,30 +3,37 @@ using System.Collections.Generic;
namespace ETHotfix
{
// 客户端为了0GC需要消息池,服务端消息需要跨协程不需要消息池
public class MessagePool
{
public static MessagePool Instance { get; } = new MessagePool();
#if !SERVER
private readonly Dictionary<Type, Queue<object>> dictionary = new Dictionary<Type, Queue<object>>();
#endif
public object Fetch(Type type)
{
#if !SERVER
Queue<object> queue;
if (!this.dictionary.TryGetValue(type, out queue))
{
queue = new Queue<object>();
this.dictionary.Add(type, 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;
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
......@@ -37,6 +44,7 @@ namespace ETHotfix
public void Recycle(object obj)
{
#if !SERVER
Type type = obj.GetType();
Queue<object> queue;
if (!this.dictionary.TryGetValue(type, out queue))
......@@ -45,6 +53,7 @@ namespace ETHotfix
this.dictionary.Add(type, queue);
}
queue.Enqueue(obj);
#endif
}
}
}
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册