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