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() { // 配置对象池参数