From e7f0636f30c0ce28fc793d4a49993002c872d1ee Mon Sep 17 00:00:00 2001
From: ALEXTANG <574809918@qq.com>
Date: Thu, 30 Nov 2023 00:13:23 +0800
Subject: [PATCH] =?UTF-8?q?=E6=8B=93=E5=B1=95=E7=BB=86=E5=88=86=E5=86=85?=
=?UTF-8?q?=E5=AD=98=E5=AF=B9=E8=B1=A1=E7=94=9F=E5=91=BD=E5=91=A8=E6=9C=9F?=
=?UTF-8?q?=E3=80=82?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
拓展细分内存对象生命周期。
---
.../Core/MemoryPool/MemoryPoolExtension.cs | 57 +++++++++++++++++++
.../MemoryPool/MemoryPoolExtension.cs.meta | 3 +
2 files changed, 60 insertions(+)
create mode 100644 UnityProject/Assets/TEngine/Runtime/Core/MemoryPool/MemoryPoolExtension.cs
create mode 100644 UnityProject/Assets/TEngine/Runtime/Core/MemoryPool/MemoryPoolExtension.cs.meta
diff --git a/UnityProject/Assets/TEngine/Runtime/Core/MemoryPool/MemoryPoolExtension.cs b/UnityProject/Assets/TEngine/Runtime/Core/MemoryPool/MemoryPoolExtension.cs
new file mode 100644
index 00000000..18619890
--- /dev/null
+++ b/UnityProject/Assets/TEngine/Runtime/Core/MemoryPool/MemoryPoolExtension.cs
@@ -0,0 +1,57 @@
+using System;
+
+namespace TEngine
+{
+ ///
+ /// 内存池对象基类。
+ ///
+ public abstract class MemoryObject : IMemory
+ {
+ ///
+ /// 清理内存对象回收入池。
+ ///
+ public virtual void Clear()
+ {
+ }
+
+ ///
+ /// 从内存池中初始化。
+ ///
+ public abstract void InitFromPool();
+
+ ///
+ /// 回收到内存池。
+ ///
+ public abstract void RecycleToPool();
+ }
+
+ public static partial class MemoryPool
+ {
+ ///
+ /// 从内存池获取内存对象。
+ ///
+ /// 内存对象类型。
+ /// 内存对象。
+ public static T Alloc() where T : MemoryObject, new()
+ {
+ T memory = Acquire();
+ memory.InitFromPool();
+ return memory;
+ }
+
+ ///
+ /// 将内存对象归还内存池。
+ ///
+ /// 内存对象。
+ public static void Dealloc(MemoryObject memory)
+ {
+ if (memory == null)
+ {
+ throw new Exception("Memory is invalid.");
+ }
+
+ memory.RecycleToPool();
+ Release(memory);
+ }
+ }
+}
\ No newline at end of file
diff --git a/UnityProject/Assets/TEngine/Runtime/Core/MemoryPool/MemoryPoolExtension.cs.meta b/UnityProject/Assets/TEngine/Runtime/Core/MemoryPool/MemoryPoolExtension.cs.meta
new file mode 100644
index 00000000..2d4491f4
--- /dev/null
+++ b/UnityProject/Assets/TEngine/Runtime/Core/MemoryPool/MemoryPoolExtension.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: ad13ef73c22340058c4420733a22b580
+timeCreated: 1701273442
\ No newline at end of file