From 6f9ec2e24bb1e4c4fbc9c1bfa4d1782ef102c051 Mon Sep 17 00:00:00 2001
From: "2248356998 qq.com" <2248356998@qq.com>
Date: Wed, 15 Oct 2025 17:40:33 +0800
Subject: [PATCH] =?UTF-8?q?feat:=20=E5=B9=B6=E5=8F=91=E5=AD=97=E5=85=B8?=
 =?UTF-8?q?=E6=9B=BF=E6=8D=A2=E4=B8=BA=20NonBlockingDictionary=20=E7=B1=BB?=
 =?UTF-8?q?=E5=9E=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
 .../Services/Event/EventService.cs            |    2 +-
 .../Extensions/ObjectExtensions.cs            |    2 +-
 .../App/Extensions/ObjectExtensions.cs        |    2 +-
 ...tCoreBuilderServiceCollectionExtensions.cs |    6 +-
 .../ModelBinders/Binders/FromConvertBinder.cs |    4 +-
 .../Binders/FromConvertBinderProvider.cs      |    4 +-
 .../Validators/DataValidator.cs               |   10 +-
 ...ncyInjectionServiceCollectionExtensions.cs |    4 +-
 .../Internal/Penetrates.cs                    |   12 +-
 .../HostedServices/EventBusHostedService.cs   |    2 +-
 .../FriendlyException/Oops.cs                 |   10 +-
 .../Logging/Extensions/ILoggerExtensions.cs   |    2 +-
 .../Extensions/StringLoggingExtensions.cs     |    2 +-
 .../Implantations/File/FileLoggerProvider.cs  |    2 +-
 .../Internal/StringLoggingPartSetters.cs      |    2 +-
 src/Admin/ThingsGateway.Furion/Logging/Log.cs |    2 +-
 .../Cancellations/JobCancellationToken.cs     |    2 +-
 .../Schedule/Details/JobDetail.Methods.cs     |    2 +-
 .../Factories/SchedulerFactory.Internal.cs    |    2 +-
 .../Schedule/Triggers/Trigger.Methods.cs      |    2 +-
 .../Builders/SpecificationDocumentBuilder.cs  |   20 +-
 .../UnifyResult/UnifyContext.cs               |    4 +-
 .../ConcurrentDictionaryExtensions.cs         |    6 +-
 .../Core/Extensions/IDictionaryExtensions.cs  |    4 +-
 .../V5_Experience/Core/Options/CoreOptions.cs |    8 +-
 .../Core/Reflection/ObjectPropertyGetter.cs   |    2 +-
 .../Core/Reflection/ObjectPropertySetter.cs   |    2 +-
 .../Builders/HttpDeclarativeBuilder.cs        |    4 +-
 .../Processors/MessagePackContentProcessor.cs |    2 +-
 .../Caching/MemoryCache.cs                    |    4 +-
 .../ThingsGateway.NewLife.X/Caching/Readme.MD |    2 +-
 .../Collections/CollectionHelper.cs           |    6 +-
 .../Collections/ConcurrentHashSet.cs          |    2 +-
 .../DictionaryImpl.SnapshotImpl.cs            |   77 +
 .../ConcurrentDictionary/DictionaryImpl.cs    |   93 ++
 .../DictionaryImplBoxed.cs                    |  138 ++
 .../ConcurrentDictionary/DictionaryImplInt.cs |  143 ++
 .../DictionaryImplLong.cs                     |  143 ++
 .../DictionaryImplNint.cs                     |  143 ++
 .../ConcurrentDictionary/DictionaryImplRef.cs |   95 ++
 .../ConcurrentDictionary/DictionaryImpl`2.cs  |   81 +
 .../ConcurrentDictionary/DictionaryImpl`3.cs  | 1453 ++++++++++++++++
 .../Counter/Counter32.cs                      |  204 +++
 .../Counter/Counter64.cs                      |  203 +++
 .../Counter/CounterBase.cs                    |   38 +
 .../NonBlockingDictionary.cs                  | 1460 +++++++++++++++++
 .../Collections/NonBlockingDictionary/Util.cs |   21 +
 .../Collections/ObjectPool.cs                 |    2 +-
 .../Common/ExpiringDictionary.cs              |    5 +-
 .../Common/FastMapper.cs                      |    4 +-
 .../Configuration/CompositeConfigProvider.cs  |    4 +-
 .../Extension/DictionaryExtensions.cs         |    8 +-
 .../Extension/LinqExtensions.cs               |    2 +-
 .../Logger/ConsoleLog.cs                      |    2 +-
 .../ThingsGateway.NewLife.X/Logger/ITracer.cs |    4 +-
 .../Logger/TextFileLog.cs                     |    4 +-
 .../Messaging/IEventBus.cs                    |    2 +-
 .../Model/DeferredQueue.cs                    |    6 +-
 .../Model/IServiceScope.cs                    |    2 +-
 .../Net/IDnsResolver.cs                       |    2 +-
 .../ThingsGateway.NewLife.X/Net/NetServer.cs  |    4 +-
 .../Net/SessionBase.cs                        |    2 +-
 .../Net/SessionCollection.cs                  |    2 +-
 .../ThingsGateway.NewLife.X/Net/UdpSession.cs |    2 +-
 .../Redis/FullRedis.cs                        |    2 +-
 .../Redis/RedisClient.cs                      |    8 +-
 .../Reflection/AssemblyX.cs                   |    6 +-
 .../Reflection/AttributeX.cs                  |    2 +-
 .../Reflection/IReflect.cs                    |   12 +-
 .../Reflection/ScriptEngine.cs                |    2 +-
 .../Serialization/Binary/BinaryComposite.cs   |    2 +-
 .../Serialization/Json/IJsonHost.cs           |    2 +-
 .../Serialization/SerialHelper.cs             |    2 +-
 .../IntegrationServices/SerializeService.cs   |    2 +-
 .../Sugar/Utilities/CallContextAsync.cs       |    4 +-
 .../Sugar/Utilities/FastCopy.cs               |    2 +-
 .../Utilities/PropertyCallAdapterProvider.cs  |    4 +-
 src/Directory.Build.props                     |    6 +-
 .../Channel/DDP/DDPUdpSessionChannel.cs       |    2 +-
 .../DDP/InternalConcurrentDictionary.cs       |    2 +-
 .../DeviceSingleStreamDataHandleAdapter.cs    |    4 +-
 .../Device/DeviceBase.cs                      |   12 +-
 .../Localization/JsonLocalizer.cs             |    2 +-
 .../Driver/Collect/CollectBase.cs             |    4 +-
 .../Driver/Collect/CollectFoundationBase.cs   |    2 +-
 .../Entity/Variable.cs                        |    2 +-
 .../GlobalData/GlobalData.cs                  |   16 +-
 .../Model/ChannelRuntime.cs                   |    2 +-
 .../Model/DeviceRunTime.cs                    |    2 +-
 .../Services/Device/DeviceService.cs          |    4 +-
 .../Services/Device/DeviceServiceHelpers.cs   |    6 +-
 .../Services/Device/DeviceServiceHelpers.m.cs |    6 +-
 .../Services/Device/IDeviceService.cs         |    2 +-
 .../ChannelManage/ChannelThreadManage.cs      |    2 +-
 .../ChannelManage/IChannelThreadManage.cs     |    2 +-
 .../DeviceManage/DeviceThreadManage.cs        |    6 +-
 .../Services/Plugin/PluginService.cs          |    6 +-
 .../Services/Plugin/PluginServiceUtil.cs      |    2 +-
 .../Services/Rpc/RpcService.cs                |    2 +-
 .../Trigger/AlarmChangedTriggerNode.cs        |    4 +-
 .../Trigger/ValueChangedTriggerNode.cs        |    4 +-
 .../Services/Variable/IVariableService.cs     |    2 +-
 .../Services/Variable/VariableService.cs      |    4 +-
 .../Variable/VariableServiceHelpers.cs        |   14 +-
 .../Variable/VariableEditComponent.razor.cs   |    4 +-
 .../Variable/VariableRow.razor.cs             |    8 +-
 .../Master/Core/ModbusTcpMessage.cs           |   91 +-
 .../Master/ModbusMaster.cs                    |    7 +-
 .../Slave/ModbusSlave.cs                      |    8 +-
 .../ThingsGateway.Foundation.OpcDa.csproj     |    1 +
 .../ThingsGateway.Foundation.OpcUa.csproj     |    2 +-
 .../S7/SiemensS7Master.cs                     |   11 +-
 .../SqlDB/SqlDbProducer.other.cs              |    2 +-
 .../ModbusSlave/ModbusSlave.cs                |    2 +-
 .../OpcDaMaster/OpcDaMaster.cs                |    2 +-
 .../OpcUaMaster/OpcUaMaster.cs                |    2 +-
 .../OpcUaServer/OpcUaServer.cs                |    2 +-
 .../SiemensS7Master/SiemensS7Master.cs        |    2 +-
 .../Test/TestKafkaDynamicModel.cs             |    2 +-
 119 files changed, 4564 insertions(+), 245 deletions(-)
 create mode 100644 src/Admin/ThingsGateway.NewLife.X/Collections/NonBlockingDictionary/ConcurrentDictionary/DictionaryImpl.SnapshotImpl.cs
 create mode 100644 src/Admin/ThingsGateway.NewLife.X/Collections/NonBlockingDictionary/ConcurrentDictionary/DictionaryImpl.cs
 create mode 100644 src/Admin/ThingsGateway.NewLife.X/Collections/NonBlockingDictionary/ConcurrentDictionary/DictionaryImplBoxed.cs
 create mode 100644 src/Admin/ThingsGateway.NewLife.X/Collections/NonBlockingDictionary/ConcurrentDictionary/DictionaryImplInt.cs
 create mode 100644 src/Admin/ThingsGateway.NewLife.X/Collections/NonBlockingDictionary/ConcurrentDictionary/DictionaryImplLong.cs
 create mode 100644 src/Admin/ThingsGateway.NewLife.X/Collections/NonBlockingDictionary/ConcurrentDictionary/DictionaryImplNint.cs
 create mode 100644 src/Admin/ThingsGateway.NewLife.X/Collections/NonBlockingDictionary/ConcurrentDictionary/DictionaryImplRef.cs
 create mode 100644 src/Admin/ThingsGateway.NewLife.X/Collections/NonBlockingDictionary/ConcurrentDictionary/DictionaryImpl`2.cs
 create mode 100644 src/Admin/ThingsGateway.NewLife.X/Collections/NonBlockingDictionary/ConcurrentDictionary/DictionaryImpl`3.cs
 create mode 100644 src/Admin/ThingsGateway.NewLife.X/Collections/NonBlockingDictionary/Counter/Counter32.cs
 create mode 100644 src/Admin/ThingsGateway.NewLife.X/Collections/NonBlockingDictionary/Counter/Counter64.cs
 create mode 100644 src/Admin/ThingsGateway.NewLife.X/Collections/NonBlockingDictionary/Counter/CounterBase.cs
 create mode 100644 src/Admin/ThingsGateway.NewLife.X/Collections/NonBlockingDictionary/NonBlockingDictionary.cs
 create mode 100644 src/Admin/ThingsGateway.NewLife.X/Collections/NonBlockingDictionary/Util.cs
diff --git a/src/Admin/ThingsGateway.Admin.Application/Services/Event/EventService.cs b/src/Admin/ThingsGateway.Admin.Application/Services/Event/EventService.cs
index d5a89f7bf..26b7d14e0 100644
--- a/src/Admin/ThingsGateway.Admin.Application/Services/Event/EventService.cs
+++ b/src/Admin/ThingsGateway.Admin.Application/Services/Event/EventService.cs
@@ -20,7 +20,7 @@ namespace ThingsGateway.Admin.Application;
 /// 
 public class EventService : IEventService, IDisposable
 {
-    private ConcurrentDictionary> Cache = new();
+    private NonBlockingDictionary> Cache = new();
 
     public void Dispose()
     {
diff --git a/src/Admin/ThingsGateway.Common/Extensions/ObjectExtensions.cs b/src/Admin/ThingsGateway.Common/Extensions/ObjectExtensions.cs
index f3c496fd7..d3404fb55 100644
--- a/src/Admin/ThingsGateway.Common/Extensions/ObjectExtensions.cs
+++ b/src/Admin/ThingsGateway.Common/Extensions/ObjectExtensions.cs
@@ -82,7 +82,7 @@ public static class ObjectExtensions
     /// 
     /// 字典
     /// 新字典
-    internal static void AddOrUpdate(this ConcurrentDictionary dic, Dictionary newDic)
+    internal static void AddOrUpdate(this NonBlockingDictionary dic, Dictionary newDic)
     {
         foreach (var (key, value) in newDic)
         {
diff --git a/src/Admin/ThingsGateway.Furion/App/Extensions/ObjectExtensions.cs b/src/Admin/ThingsGateway.Furion/App/Extensions/ObjectExtensions.cs
index cdf2150e3..80fe42d56 100644
--- a/src/Admin/ThingsGateway.Furion/App/Extensions/ObjectExtensions.cs
+++ b/src/Admin/ThingsGateway.Furion/App/Extensions/ObjectExtensions.cs
@@ -205,7 +205,7 @@ public static class ObjectExtensions
     /// 
     /// 字典
     /// 新字典
-    internal static void AddOrUpdate(this ConcurrentDictionary dic, Dictionary newDic)
+    internal static void AddOrUpdate(this NonBlockingDictionary dic, Dictionary newDic)
     {
         foreach (var (key, value) in newDic)
         {
diff --git a/src/Admin/ThingsGateway.Furion/AspNetCore/Extensions/AspNetCoreBuilderServiceCollectionExtensions.cs b/src/Admin/ThingsGateway.Furion/AspNetCore/Extensions/AspNetCoreBuilderServiceCollectionExtensions.cs
index 66eeb2537..149f65443 100644
--- a/src/Admin/ThingsGateway.Furion/AspNetCore/Extensions/AspNetCoreBuilderServiceCollectionExtensions.cs
+++ b/src/Admin/ThingsGateway.Furion/AspNetCore/Extensions/AspNetCoreBuilderServiceCollectionExtensions.cs
@@ -94,7 +94,7 @@ public static class AspNetCoreBuilderServiceCollectionExtensions
     /// 
     /// 
     /// 
-    public static IMvcBuilder AddFromConvertBinding(this IMvcBuilder mvcBuilder, Action> configure = default)
+    public static IMvcBuilder AddFromConvertBinding(this IMvcBuilder mvcBuilder, Action> configure = default)
     {
         mvcBuilder.Services.AddFromConvertBinding(configure);
 
@@ -107,13 +107,13 @@ public static class AspNetCoreBuilderServiceCollectionExtensions
     /// 
     /// 
     /// 
-    public static IServiceCollection AddFromConvertBinding(this IServiceCollection services, Action> configure = default)
+    public static IServiceCollection AddFromConvertBinding(this IServiceCollection services, Action> configure = default)
     {
         // 非 Web 环境跳过注册
         if (App.WebHostEnvironment == default) return services;
 
         // 定义模型绑定转换器集合
-        var modelBinderConverts = new ConcurrentDictionary();
+        var modelBinderConverts = new NonBlockingDictionary();
         modelBinderConverts.TryAdd(typeof(DateTime), typeof(DateTimeModelConvertBinder));
         modelBinderConverts.TryAdd(typeof(DateTimeOffset), typeof(DateTimeOffsetModelConvertBinder));
 
diff --git a/src/Admin/ThingsGateway.Furion/AspNetCore/ModelBinders/Binders/FromConvertBinder.cs b/src/Admin/ThingsGateway.Furion/AspNetCore/ModelBinders/Binders/FromConvertBinder.cs
index 818382e7a..2eaceeb58 100644
--- a/src/Admin/ThingsGateway.Furion/AspNetCore/ModelBinders/Binders/FromConvertBinder.cs
+++ b/src/Admin/ThingsGateway.Furion/AspNetCore/ModelBinders/Binders/FromConvertBinder.cs
@@ -27,13 +27,13 @@ public class FromConvertBinder : IModelBinder
     /// 
     /// 定义模型绑定转换器集合
     /// 
-    private readonly ConcurrentDictionary _modelBinderConverts;
+    private readonly NonBlockingDictionary _modelBinderConverts;
 
     /// 
     /// 构造函数
     /// 
     /// 定义模型绑定转换器集合
-    public FromConvertBinder(ConcurrentDictionary modelBinderConverts)
+    public FromConvertBinder(NonBlockingDictionary modelBinderConverts)
     {
         _modelBinderConverts = modelBinderConverts;
     }
diff --git a/src/Admin/ThingsGateway.Furion/AspNetCore/ModelBinders/Binders/FromConvertBinderProvider.cs b/src/Admin/ThingsGateway.Furion/AspNetCore/ModelBinders/Binders/FromConvertBinderProvider.cs
index 409946fdb..fd376f1d0 100644
--- a/src/Admin/ThingsGateway.Furion/AspNetCore/ModelBinders/Binders/FromConvertBinderProvider.cs
+++ b/src/Admin/ThingsGateway.Furion/AspNetCore/ModelBinders/Binders/FromConvertBinderProvider.cs
@@ -28,13 +28,13 @@ public class FromConvertBinderProvider : IModelBinderProvider
     /// 
     /// 定义模型绑定转换器集合
     /// 
-    private readonly ConcurrentDictionary _modelBinderConverts;
+    private readonly NonBlockingDictionary _modelBinderConverts;
 
     /// 
     /// 构造函数
     /// 
     /// 定义模型绑定转换器集合
-    public FromConvertBinderProvider(ConcurrentDictionary modelBinderConverts)
+    public FromConvertBinderProvider(NonBlockingDictionary modelBinderConverts)
     {
         _modelBinderConverts = modelBinderConverts;
     }
diff --git a/src/Admin/ThingsGateway.Furion/DataValidation/Validators/DataValidator.cs b/src/Admin/ThingsGateway.Furion/DataValidation/Validators/DataValidator.cs
index 6d0432316..290ef9011 100644
--- a/src/Admin/ThingsGateway.Furion/DataValidation/Validators/DataValidator.cs
+++ b/src/Admin/ThingsGateway.Furion/DataValidation/Validators/DataValidator.cs
@@ -40,7 +40,7 @@ public static class DataValidator
     /// 
     /// 验证类型正则表达式
     /// 
-    private static readonly ConcurrentDictionary ValidationItemMetadatas;
+    private static readonly NonBlockingDictionary ValidationItemMetadatas;
 
     /// 
     /// 构造函数
@@ -57,7 +57,7 @@ public static class DataValidator
         ValidationItemMetadatas = GetValidationValidationItemMetadatas();
 
         // 缓存所有正则表达式
-        GetValidationTypeValidationItemMetadataCached = new ConcurrentDictionary