From de844d72748d627bd820a686cac6f64484bdf2f8 Mon Sep 17 00:00:00 2001
From: wuyanchen <307378529@qq.com>
Date: Thu, 25 Dec 2025 15:50:11 +0800
Subject: [PATCH] `
---
XNet.Business/ListPolicy.cs | 68 ++++++++++++++++++++++++++++
XNet.Business/WsConnectionManager.cs | 62 -------------------------
2 files changed, 68 insertions(+), 62 deletions(-)
create mode 100644 XNet.Business/ListPolicy.cs
diff --git a/XNet.Business/ListPolicy.cs b/XNet.Business/ListPolicy.cs
new file mode 100644
index 0000000..e4ac639
--- /dev/null
+++ b/XNet.Business/ListPolicy.cs
@@ -0,0 +1,68 @@
+using Microsoft.Extensions.ObjectPool;
+
+namespace XNet.Business
+{
+
+
+ // ========== 核心:继承 DefaultPooledObjectPolicy 并重写 Create/Return ==========
+ ///
+ /// 自定义 Agent 消息列表池化策略(重写 Create/Return)
+ ///
+ public sealed class SyncMsgListPolicy : DefaultPooledObjectPolicy>
+ {
+ // 重写 Create 方法:指定初始容量,减少扩容开销
+ public override List Create()
+ {
+ return new List(100); // 初始容量100
+ }
+
+ // 重写 Return 方法:清空列表数据,保留容量
+ public override bool Return(List obj)
+ {
+ obj.Clear(); // 关键:归还前清空数据,避免脏数据
+ return true; // 返回true表示可复用
+ }
+ }
+
+ ///
+ /// 自定义失效连接列表池化策略
+ ///
+ public sealed class DeadConnListPolicy : DefaultPooledObjectPolicy>
+ {
+ public override List Create()
+ {
+ return new List(50); // 初始容量50
+ }
+
+ public override bool Return(List obj)
+ {
+ obj.Clear();
+ return true;
+ }
+ }
+
+ // ========== 2. byte[] 直接实现 IPooledPolicy(绕过 new() 约束) ==========
+ public sealed class ByteArrayPolicy : IPooledObjectPolicy
+ {
+ private readonly int _defaultSize;
+
+ public ByteArrayPolicy(int defaultSize = 4096)
+ {
+ _defaultSize = defaultSize;
+ }
+
+ // 直接实现 Create 方法,自定义数组创建逻辑(指定长度)
+ public byte[] Create()
+ {
+ return new byte[_defaultSize]; // 合法:数组创建必须指定长度
+ }
+
+ // 直接实现 Return 方法,自定义归还逻辑
+ public bool Return(byte[] obj)
+ {
+ if (obj.Length != _defaultSize) return false; // 仅复用指定大小的数组
+ Array.Clear(obj); // 清空数据,避免泄露
+ return true;
+ }
+ }
+}
diff --git a/XNet.Business/WsConnectionManager.cs b/XNet.Business/WsConnectionManager.cs
index b5a12f4..94ad6e9 100644
--- a/XNet.Business/WsConnectionManager.cs
+++ b/XNet.Business/WsConnectionManager.cs
@@ -22,68 +22,6 @@ namespace XNet.Business
private readonly ObjectPool _byteArrayPool;
- // ========== 核心:继承 DefaultPooledObjectPolicy 并重写 Create/Return ==========
- ///
- /// 自定义 Agent 消息列表池化策略(重写 Create/Return)
- ///
- public sealed class SyncMsgListPolicy : DefaultPooledObjectPolicy>
- {
- // 重写 Create 方法:指定初始容量,减少扩容开销
- public override List Create()
- {
- return new List(100); // 初始容量100
- }
-
- // 重写 Return 方法:清空列表数据,保留容量
- public override bool Return(List obj)
- {
- obj.Clear(); // 关键:归还前清空数据,避免脏数据
- return true; // 返回true表示可复用
- }
- }
-
- ///
- /// 自定义失效连接列表池化策略
- ///
- public sealed class DeadConnListPolicy : DefaultPooledObjectPolicy>
- {
- public override List Create()
- {
- return new List(50); // 初始容量50
- }
-
- public override bool Return(List obj)
- {
- obj.Clear();
- return true;
- }
- }
-
- // ========== 2. byte[] 直接实现 IPooledPolicy(绕过 new() 约束) ==========
- public sealed class ByteArrayPolicy : IPooledObjectPolicy
- {
- private readonly int _defaultSize;
-
- public ByteArrayPolicy(int defaultSize = 4096)
- {
- _defaultSize = defaultSize;
- }
-
- // 直接实现 Create 方法,自定义数组创建逻辑(指定长度)
- public byte[] Create()
- {
- return new byte[_defaultSize]; // 合法:数组创建必须指定长度
- }
-
- // 直接实现 Return 方法,自定义归还逻辑
- public bool Return(byte[] obj)
- {
- if (obj.Length != _defaultSize) return false; // 仅复用指定大小的数组
- Array.Clear(obj); // 清空数据,避免泄露
- return true;
- }
- }
-
public WsConnectionManager()
{
// 配置对象池参数