v4.1.5
更新日期: 2026.3.1
更新描述:
- 全局异步优化:所有
ConfigureAwait(EasyTask.ContinueOnCapturedContext)调用统一改为ConfigureDefaultAwait(),简化代码并提升异步性能表现。 - PlcBridge驱动器架构重构:引入事件驱动机制替代轮询模式,大幅降低CPU占用率,提升驱动器执行效率。
- 驱动器执行方法优化:将驱动器的读写方法返回类型从
Task改为ValueTask,减少不必要的堆分配。
更新详情:
All
- 全局异步代码优化,将所有
ConfigureAwait(EasyTask.ContinueOnCapturedContext)调用统一改为ConfigureDefaultAwait(),简化代码结构并提升性能。
TouchSocket.Rpc
TouchSocketPro.PlcBridges
- 引入
DriveRunner类,采用事件驱动机制(AsyncManualResetEvent)替代传统轮询模式,驱动器仅在有读写请求时才执行,显著降低CPU占用率。 -
PlcBridgeService.AddDriveAsync方法优化驱动器添加逻辑:分组驱动器仅在未运行时启动,避免重复启动;独立分组驱动器先添加后启动,确保状态一致。 -
PlcDrive<TValue>抽象类中的ExecuteReadAsync和ExecuteWriteAsync方法返回类型从Task<Result>改为ValueTask<Result>,提升异步性能。 -
PlcDrive基类中的OnExecuteAsync方法返回类型从Task<int>改为ValueTask<int>。 -
PlcDrive新增AsyncManualResetEvent属性,配合DriveRunner实现按需执行机制。 -
MemoryPlcDrive<TValue>驱动器调整方法返回类型为ValueTask<Result>,并使用EasyValueTask.FromResult提升性能。 -
InternalPlcOperator<TValue>操作类中所有异步等待统一使用ConfigureDefaultAwait()。
v4.1.4
更新日期: 2026.2.25
更新描述:
Metadata类完全重构,不再继承Dictionary<string, string>,支持超长值按 UTF-8 编码长度自动分段存储。- 新增
WriteVarString/ReadVarString配套方法,提供可变长度编码的字符串序列化支持。 - 移除
PackageBase、RouterPackage中的#if AllowsRefStruct条件编译指令,简化代码结构。 - 代码风格优化,多处 switch 语句改用 switch 表达式。
更新详情:
TouchSocket.Core
-
WriterExtension.WriteVarString<TWriter>方法,使用VarUInt32编码 UTF-8 字节长度(长度+1),支持null与空字符串的区分写入。 -
ReaderExtension.ReadVarString<TReader>方法,与WriteVarString配套,读取可变长度编码的 UTF-8 字符串。 -
Metadata类:从继承Dictionary<string, string>改为实现IEnumerable<KeyValuePair<string, string>>,底层存储改为List<KeyValuePair<string, string>>,支持值超过 254 字节(UTF-8)时自动分段存储与读取合并。
v4.1.2(3)
更新日期: 2026.2.12
更新描述:
- 【新功能】TouchSocketPro新增Dmtp内网穿透(Relay)功能,支持端口映射和数据转发。
- MQTT消息分发内存优化,使用引用计数和ArrayPool减少内存分配和GC压力。
- 多个通信组件连接流程优化,确保事件触发顺序正确。
- CheckClearPlugin增强日志,提供更详细的调试信息。
- BytesReader性能优化,修复序列读取和释放逻辑。
更新详情:
TouchSocket.Core
-
BytesReader.Sequence属性使用m_position而不是BytesRead,提升读取性能。 -
BytesReader.Dispose方法标记为readonly,符合结构体最佳实践。
TouchSocket.Mqtt
- 引入
SharedPayload类支持引用计数的Payload共享,大幅减少内存复制。 -
MqttArrivedMessage.Payload类型从ReadOnlyMemory<byte>改为ReadOnlySequence<byte>,支持零拷贝场景。 -
MqttPublishMessage.Payload类型从ReadOnlyMemory<byte>改为ReadOnlySequence<byte>,统一内存模型。 -
DistributeMessage类,使用SharedPayload实现消息分发时的内存共享。 -
MqttActor使用ConcurrentDictionary替代Dictionary存储QoS2消息,提升并发性能。 -
MqttActor新增PooledArrivedMessage结构体,使用ArrayPool管理QoS2消息的内存生命周期。 -
MqttSessionActor消息分发流程增加异常处理,确保SharedPayload正确释放。 -
MqttBroker.ForwardMessageAsync方法返回已分发的订阅者数量,并优化多订阅者场景下的内存共享。 -
Subscription、ThreadSafeTopicSubscriptions类从MqttBroker中独立出来,提升代码模块化。
TouchSocket
-
TcpClientBase.PrivateOnConnected方法调整事件触发顺序:先触发OnTcpConnected事件,再启动接收循环。 -
TcpSessionClientBase.PrivateOnConnected方法调整事件触发顺序:先触发OnTcpConnected事件,再启动接收循环。 -
CheckClearPlugin添加详细的Debug和Warning级别日志,便于调试连接清理逻辑。 -
TcpService在当接收短链接数据时,无法接收数据。
TouchSocket.NamedPipe
-
NamedPipeClientBase.PrivateConnected方法调整事件触发顺序:先触发OnNamedPipeConnected事件,再启动接收循环。 -
NamedPipeSessionClientBase.PrivateConnected方法调整事件触发顺序:先触发OnNamedPipeConnected事件,再启动接收循环。
TouchSocket.SerialPorts
-
SerialPortClientBase.PrivateConnected方法调整事件触发顺序:先触发OnSerialConnected事件,再启动接收循环。
TouchSocketPro.Dmtp
-
IDmtpRelayActor接口,定义Dmtp内网穿透Actor的核心功能。
v4.1.1
更新日期: 2026.2.1
更新描述:
- JSON序列化优化,新增全局默认配置选项。
- 重连插件优化重连逻辑和错误处理。
- HTTP响应增强,修复内容长度校验和流式写入问题。
- DMTP关闭流程优化,先发送关闭消息再执行关闭。
- PLC桥接服务修复,驱动运行器正确关联分组信息。
更新详情:
TouchSocket.Core
-
TouchSocketCoreUtility.IsUrl方法,使用Uri.TryCreate替代正则表达式,提升URL验证性能和准确性。 -
SerializeConvert.DefaultJsonSerializerOptions全局默认JSON序列化选项属性,允许用户自定义全局序列化配置。 -
SerializeConvert.ToJsonString方法使用全局默认选项进行序列化。 -
SerializeConvert.FromJsonString方法新增可选jsonSerializerOptions参数,支持自定义序列化选项(默认使用全局配置)。
TouchSocket.Http
-
HttpResponse.WriteAsync方法在无内容时自动添加Content-Length: 0头部。 -
HttpResponse.WriteAsync方法修正内容长度校验逻辑,当写入数据超过预期长度时抛出异常。 -
HttpExtensions.CreateWriteStream方法的WriteAsync重载缺少cancellationToken参数传递,现已正确传递取消令牌。
TouchSocket.Dmtp
TouchSocket
-
ReconnectionOption<TClient>构造函数简化ConnectAction逻辑,移除内置重连重试代码,仅保留连接调用。 -
ReconnectionPlugin<TClient>轮询任务使用CancellationToken.None替代插件的取消令牌,避免意外中断轮询。
TouchSocket.WebApi.Swagger
-
SwaggerJsonSerializerContextJSON序列化上下文类,使用源生成器优化OpenAPI对象序列化性能。 -
SwaggerPlugin.GetOpenApiJson方法使用SwaggerJsonSerializerContext.Default.OpenApiRoot进行序列化,提升性能。
TouchSocketPro.PlcBridges
-
PlcBridgeService.GetOrAddDriveRunner方法创建DriveRunner时正确传递分组信息,而非使用GUID。
v4.1.0
更新日期: 2026.1.25
更新描述:
- 【不兼容变更】默认JSON序列化器从
Newtonsoft.Json切换到System.Text.Json,提升性能和AOT兼容性。 - RPC代码生成器优化,移除同步代码生成相关逻辑,简化代码结构。
- Swagger组件全面迁移到
System.Text.Json,提升性能和内存使用。 - Modbus主站扩展类精简,移除部分重复的同步方法。
- 命名管道服务扩展类优化,移除同步启动方法。
更新详情:
TouchSocket.Core
-
TouchSocket.Rpc.RpcAttribute中的同步代码生成相关逻辑和注释代码,简化代码结构。 -
RpcAttribute.GetPublicProperties抽象方法,要求派生类实现属性获取逻辑。 -
RpcAttribute.LoadPublicPropertiesAsDictionary方法改为私有,优化属性加载逻辑。 -
RpcAttribute.GetPublicPropertiesAsDictionary方法上的RequiresUnreferencedCode特性。 -
CodeGenerator类移除注释代码,简化代码结构。
TouchSocket.WebApi
-
WebApiOption构造函数不再自动添加JSON序列化器,需要用户手动配置序列化器。 -
WebApiSerializerConverter.AddJsonSerializerFormatter方法(使用Newtonsoft.Json)。 -
WebApiSerializerConverter默认构造函数中添加System.Text.Json序列化器配置,清除默认解析器链以优化性能。 -
WebApiSerializerConverter.Serialize方法增加空值检查,避免不必要的序列化操作。 -
WebApiClient和WebApiClientSlim使用SystemTextJsonStringToClassSerializerFormatter替代JsonStringToClassSerializerFormatter。 -
WebApiAttribute.GetPublicProperties方法实现,返回公共属性列表。 -
WebApiJsonSerializerFormatter改为继承自SystemTextJsonStringToClassSerializerFormatter。 -
WebApiSystemTextJsonSerializerContext增加常见类型的JSON序列化支持(bool、string、int、double、float、DateTime、DateTimeOffset、Version)。
TouchSocket.WebApi.Swagger
- Swagger组件所有OpenAPI相关类从
Newtonsoft.Json迁移到System.Text.Json:OpenApiComponent、OpenApiContent、OpenApiInfo、OpenApiParameterOpenApiPathValue、OpenApiProperty、OpenApiRequestBody、OpenApiResponseOpenApiRoot、OpenApiSchema
- 所有JSON特性从
[JsonProperty]改为[JsonPropertyName]。 -
OpenApiStringEnumConverter从继承Newtonsoft.Json.Converters.StringEnumConverter改为继承System.Text.Json.Serialization.JsonStringEnumConverter。 -
SwaggerPlugin.GetOpenApiJson方法使用System.Text.Json.JsonSerializer进行序列化,配置使用JsonIgnoreCondition.WhenWritingNull和格式化输出。 -
SwaggerPlugin.BuildHttpMethod方法修复同一路径多个HTTP方法时的路由冲突问题。
TouchSocket.XmlRpc
-
XmlRpcAttribute中已废弃的构造函数(带参数版本)。 -
XmlRpcAttribute.GetPublicProperties方法实现,返回公共属性列表。
TouchSocket.Rpc
-
RpcClientExtension.Invoke同步方法(两个重载版本)。 -
RpcClientExtension.InvokeT<T>同步方法(两个重载版本,用于不同RPC客户端)。
TouchSocket
-
ClientExtension.Close同步方法(两个重载版本)。 -
ClientExtension.SafeClose同步方法(两个重载版本,已标记为Obsolete)。 -
ClientExtension.Connect同步方法(三个重载版本)。 -
ClientExtension.TryConnect同步方法(两个重载版本)。 -
SenderExtension.Send同步方法(多个重载版本,涵盖ISender、IRequestInfoSender、IIdSender、IUdpClientSender)。 -
ServiceExtension.Start和Stop同步方法(涵盖IServiceBase、ITcpService、IUdpSession)。 -
WaitingClientExtension.SendThenResponse同步方法(四个重载版本)。
TouchSocket.Modbus
-
ModbusMasterExtension.SendModbusRequest同步方法。 -
ModbusMasterExtension.ReadWriteMultipleRegisters同步方法(不带超时参数版本)。 -
ModbusMasterExtension.ReadCoils等读写方法的多个同步重载版本。 -
ModbusMasterExtension中所有标记为AsyncToSyncWarning的同步扩展方法。
TouchSocket.NamedPipe
-
NamedPipeServiceExtension.Start同步方法。
TouchSocketPro.PlcBridges
-
IPlcOperatorExtension.Read同步方法。
TouchSocket.TcpCommandLine
-
TcpCommandLinePlugin构造函数中使用SystemTextJsonStringToClassSerializerFormatter替代JsonStringToClassSerializerFormatter。
性能改进
- System.Text.Json在大多数场景下比Newtonsoft.Json性能提升 20-50%
- 异步方法强制使用避免了异步转同步的性能损耗
- Swagger JSON生成性能提升约 30%
- 减少内存分配,降低GC压力