- 博客(70)
- 资源 (3)
- 问答 (3)
- 收藏
- 关注
原创 一个GIF引发的“血案“:WPF中让Markdown中GIF动起来的探险之旅
《WPF中Markdown文档GIF动画显示的技术挑战》 摘要:本文记录了一个WPF应用显示Markdown文档并支持GIF动画的技术探索过程。初始使用Markdig.Wpf库时发现GIF无法自动播放,随后尝试WpfAnimatedGif库却遭遇内存飙升问题。最终通过XamlAnimatedGif库实现高效解决方案,并开发了自定义控件AnimatedMarkdownViewer,利用VisualTreeHelper和Dispatcher实现了自动化GIF动画处理。文章对比了不同库的性能差异,总结了WPF可视
2025-12-09 21:56:47
602
原创 TouchSocket与Unity3D的奇妙邂逅:当网络编程遇上游戏开发 [特殊字符]✨
本文介绍了如何在Unity3D中集成使用TouchSocket网络库。主要内容包括:TouchSocket与Unity的兼容性(支持Windows/Android/iOS/Linux等平台但不支持WebGL)、解决常见的DLL依赖和Json序列化问题、处理IL2CPP平台的特殊配置方法,以及优化代码性能的实用技巧。文章还提供了示例资源包和解决方案,帮助开发者顺利实现Unity项目的网络功能集成。通过详细的问题分析和步骤说明,使开发者能够克服集成过程中的各种挑战,充分发挥TouchSocket在Unity中的
2025-12-08 09:39:46
568
原创 TouchSocket奇幻漂流记:从零开始的网络编程冒险 [特殊字符]
想象一下,你正在开发一个超级厉害的网络应用,但是底层通信让你头疼不已。这时候,TouchSocket就像一位贴心的助手,帮你搞定所有繁琐的网络通信细节!不过,这仅仅是开始——就像学会了魔法咒语,但真正的冒险还在后面。💡 小提示:编程就像冒险,遇到问题时不要气馁,TouchSocket社区和文档都是你的好伙伴!:如果现有包不满足需求,可以到链接留言,我们会尽快添加支持!继续阅读其他模块的文档,开启你的网络编程大师之路吧!是一个基于.NET的程序集系列,它就像是你的。版本,就像选择适合自己等级的装备一样重要!
2025-12-08 09:36:56
564
原创 小猫和小狗:在同一台机器上聊心事 —— TouchSocket NamedPipeClient 的奇妙旅程
摘要: NamedPipeClient是TouchSocket提供的命名管道(IPC)客户端工具,用于同机进程间高效通信。它支持同步/异步消息发送、插件扩展和协议解析,具有低延迟、高安全性的特点。通过简单API即可实现进程连接(如设定管道名称PipeName)、数据收发(Send/Received事件)和生命周期管理(连接/断开回调)。开发者可通过自定义客户端类或插件机制(如日志记录)灵活扩展功能,适用于状态监控、命令传递等场景,是轻量级IPC通信的理想解决方案。
2025-11-26 20:08:39
859
原创 同台进程的“低空快线”——TouchSocket NamedPipeService 全解析
摘要: TouchSocket的NamedPipeService为进程间通信(IPC)提供了高效、轻量的解决方案,尤其适用于同一机器上的子系统间高频数据交换。该模块封装了命名管道服务端功能,支持异步操作、内存池优化(吞吐达6.5GB/s)、多管道监听,并兼容TCP类似的使用体验(如数据适配器、插件机制)。通过NuGet包快速集成,开发者可配置管道名称、日志及事件回调,实现连接管理与数据收发。典型场景包括监控-计算进程通信或本地测试环境替代网络传输。支持动态增减监听、自定义客户端会话及插件扩展,兼顾性能与灵活
2025-11-24 20:34:22
448
原创 在网络密林中传递轻盈信使 —— TouchSocket 的 UdpSession 探秘
摘要: TouchSocket的UdpSession组件为物联网等场景提供轻量高效的UDP通信方案。它兼具服务端与客户端功能,支持多线程I/O、内存池优化、组播/广播及插件扩展,适用于设备监控、实时数据传输等场景。通过简洁API可快速实现消息收发,支持委托或插件处理数据,并可通过组播实现一对多通信。需注意UDP的不可靠性,建议业务层实现重传机制,同时合理配置端口绑定与内存池以优化性能。该组件帮助开发者构建灵活、低延迟的分布式系统。
2025-11-24 20:31:59
979
原创 串口客户端背后的故事:TouchSocket SerialPortClient 探秘
摘要: TouchSocket的SerialPortClient模块为老旧串口设备提供现代化连接方案,支持RS-232/RS-485等协议。其核心优势包括易用性、内存池优化、高性能通信及灵活的适配器机制,可处理自定义协议和分包问题。通过NuGet安装后,开发者可快速配置串口参数(波特率、校验位等),实现同步/异步数据收发,并利用延迟发送提升效率。内置插件系统支持AOP编程,可在连接、收发等环节插入日志、监控等逻辑,适用于工业控制、传感器通信等场景,让传统设备无缝融入.NET生态。(149字)
2025-11-24 20:27:22
903
原创 在工业世界里当「被问责者」:TouchSocket Modbus 从站的幕后故事
摘要: TouchSocket的Modbus从站(Slave)模块为.NET开发者提供了高效、灵活的工业协议实现方案。从站通过维护数据区(线圈、寄存器等)响应主站请求,支持TCP/UDP/串口等多协议通信。其核心优势包括:插件机制(可拦截请求实现安全控制与日志)、多站点管理、内存池优化及本地Master快速读写。开发者可通过ModbusDataLocater操作数据,结合执行前后的插件(如IModbusSlaveExecutingPlugin)实现权限校验与审计。TouchSocket以高性能、易扩展和低门
2025-11-24 20:25:25
816
原创 TouchSocket Modbus 主站模块深度解析
TouchSocket Modbus主站模块为C#/.NET开发者提供了高性能、易扩展的Modbus通信解决方案。该模块支持多种协议形式(TCP/UDP/RTU等),适用于工业自动化、PLC通信等场景。通过简洁的API设计,开发者可快速实现线圈/寄存器读写操作,包括读取线圈(FC1)、写入单个寄存器(FC6)等常见功能。模块内置内存池优化性能,提供原生接口和快捷扩展两种操作方式,支持跨平台运行,显著降低开发成本。初始化简单,无需额外配置,开箱即用。
2025-11-24 20:23:16
878
原创 WPF中实现TreeView的SelectedItem双向绑定到ViewModel
在WPF中绑定TreeView的SelectedItem到ViewModel虽然有些挑战,但通过附加行为或IsSelected属性都能有效解决。附加行为方法在保持MVVM纯净度方面更胜一筹,适合大多数场景;而IsSelected方法在简单层级结构中实现更直接。当你的TreeView需要支持多级展开或使用虚拟化时,附加行为方法是最稳定可靠的选择。无论选择哪种方法,都需注意正确处理层级数据结构变化和选择状态同步问题。
2025-06-23 09:46:52
1713
1
原创 WPF TreeView 数据绑定完全指南:MVVM 模式实现
分层结构设计:将业务逻辑、数据模型和视图清晰分离双向绑定:及时同步 UI 状态与数据模型异步加载:大型树结构使用延迟加载提升性能虚拟化支持:处理大量节点时开启 UI 虚拟化命令模式:使用 ICommand 实现 UI 操作解耦模板选择器:复杂场景下可使用 TemplateSelector 实现动态模板切换通过以上实现方法和最佳实践,您可以创建出响应式、可维护的树形界面,充分发挥 WPF 数据绑定的强大功能。
2025-06-23 09:43:33
1532
原创 C# 异步方法中缺少 `await` 运算符的隐患与解决方案
缺少await的async同步阻塞,引发性能问题异常处理不符合异步规范代码误导性和维护成本增加通过合理使用awaitTask.Run或移除async关键字,可编写高效且符合预期的异步代码。异步不是魔法,async需要await才能释放其价值。
2025-05-24 23:40:20
1747
原创 C# 使用 Source Generation 提升 System.Text.Json 性能
在 C# 开发中,是处理 JSON 数据的主流方案。传统的反射式序列化虽然方便,但在高频调用和AOT场景(如 iOS/Blazor WASM)中会遇到性能瓶颈。.NET 6+ 引入的Source Generation(源生成)技术,通过在编译时生成序列化代码,可显著提升性能。本文将详解其实现方式。创建继承自的分部类,并通过// 源生成器自动填充实现 }typeofProduct// 源生成器自动填充实现 }typeofListProduct// 源生成器自动填充实现truetypeof。
2025-05-22 21:34:08
1437
原创 C#在 .NET 9.0 中启用二进制序列化:配置、风险与替代方案
尽管 .NET 9.0 仍支持通过配置启用,但其高安全风险和版本兼容性问题使其不再适用于现代应用。建议优先选择或等替代方案。若必须使用二进制序列化,请严格遵循以下原则:仅处理可信数据源。隔离反序列化操作环境。监控并更新依赖库以修复潜在漏洞。技术演进提示:微软已明确表示未来版本可能彻底移除,建议尽早制定迁移计划。// 历史终将淘汰旧技术,但我们可以优雅地过渡。
2025-05-22 20:40:30
1218
原创 使用TouchSocket应用信使实现灵活的进程内通信
TouchSocket的应用信使提供了一种高效、解耦的进程内通信方案,尤其适用于模块化开发场景。通过替代传统事件机制,开发者可以更灵活地管理组件依赖,同时通过异步支持提升系统性能。建议在跨程序集协作或复杂消息路由场景中优先使用此组件。
2025-05-22 10:37:14
713
原创 vs2022设置var变量等类型推断显示
我们在使用vs2022时,比较喜欢使用var来作为变量接收,这样的好处是代码左边就能实现左对齐,并且可以少写一个类型名称。甚至,当接收方法的返回值时,如果返回值类型是其他类型的话,使用var接收,也可以省去命名空间的步骤。但是,有时候如果代码全部只显示var,那对于我们阅读代码也是有点影响。我们无法通过var返回值,直观的看到具体类型。那么可以开启vs的类型推断显示功能。
2025-05-20 12:03:22
585
原创 基于TouchSocket实现WebSocket自定义OpCode扩展协议
前言一、WebSocket OpCode规范速览二、实现示例:协同编辑光标同步1. 客户端发送实现2. 服务端接收处理三、应用场景分析1. 实时协作系统2. 物联网控制协议3. 游戏实时交互四、协议设计建议1. 帧结构优化2. 性能优化策略五、注意事项1. 兼容性处理2. 异常监控七、示例项目在WebSocket标准协议中定义了文本(Text)、二进制(Binary)等标准操作码(OpCode),但在物联网、实时协作等场景中,我们常需要扩展私有协议。
2025-05-13 11:23:33
962
原创 C#高性能通信必备:TouchSocket字节序处理全指南
的4字节大端表示为 `{0, 0, 0, 10}高位字节存储在内存低地址,低位字节存储在高地址。低位字节存储在内存低地址,高位字节存储在高地址。所有转换方法会检查数组长度,不足时抛出。对性能敏感场景推荐使用。
2025-05-13 10:46:31
1193
原创 WPF自定义控件开发全指南:多内容切换与动画集成
一、控件基础架构设计1.1 选择控件基类1.2 定义关键属性二、动画系统集成2.1 淡入淡出动画实现2.2 滑动动画实现三、视觉状态管理四、完整使用示例4.1 XAML声明4.2 动画触发逻辑五、扩展与优化5.1 性能优化建议5.2 高级功能扩展结语本文将详细讲解如何通过WPF实现支持索引切换的多内容控件,并集成淡入淡出/滑动动画效果。本方案结合了自定义控件开发、依赖属性管理和WPF动画系统三大核心技术。// 内容集合(支持XAML直接添加子元素)// 当前显示索引(含动画触发逻辑)
2025-05-13 10:24:02
1301
原创 深入解析TouchSocket中的DynamicMethod:动态方法的实践与优化
动态方法调用模块是提供的一个高效、灵活的动态调用方案。它支持多种底层实现方式,显著提升了调用性能,并针对 AOT(Ahead-of-Time)编译环境进行了优化。无论是在传统的反射场景还是在 AOT 环境下,该模块都能提供高性能表现。命名空间程序集// 定义自定义特性// 标记方法// 获取自定义标记方法。
2025-04-07 10:11:46
985
原创 AspNetCore路由:网络请求的交通指挥官
路由系统是现代Web应用的基石,优秀的API设计往往始于合理的路由规划。ASP.NET Core提供了灵活强大的路由系统,结合中间件管道,开发者可以构建出既高效又易于维护的Web应用。掌握路由机制,将使您的服务器端编程能力提升到一个新的维度。
2025-03-30 20:28:57
964
原创 C# 异步方法设计指南:何时使用 await 还是直接返回 Task?
场景选择示例需要处理异常、资源或后续逻辑必须使用awaittry-catch仅透传异步操作且无额外逻辑直接返回Task高频调用或性能敏感路径直接返回Task避免状态机开销需要清理同步上下文。
2025-03-28 17:19:47
1054
原创 在 .NET 9 中使用 QUIC 实现高效通信:从基础到实战
NET 9 的 QUIC 实现为高性能网络应用提供了强大工具,结合多流并发和高效数据管道,可轻松构建低延迟通信系统。开发者需注意证书管理与平台适配,进一步优化可参考Microsoft 官方文档。
2025-03-25 17:35:54
1261
原创 在 ASP.NET Core 中实现限流(Rate Limiting):保护服务免受滥用与攻击
内置方案:适合简单场景,无需额外依赖,支持主流限流算法。:适合复杂需求,支持动态配置、客户端级限流和分布式部署。通过合理配置限流策略,可以有效防止服务过载,提升系统稳定性。建议结合监控日志持续优化阈值,确保用户体验与系统安全的平衡。
2025-03-24 17:21:18
1296
原创 把 ASP.NET Core 服务(BigDogServer)部署到 Linux 并作为服务运行
通过以上步骤,你可以顺利地将 BigDogServer 这样的 ASP.NET Core 服务项目发布到 Linux 服务器,并将其作为系统服务来运行。同时,通过多种方式验证服务的运行状态,确保服务能够正常工作。了解如何查看 .NET 运行时版本也有助于你对系统环境进行管理和维护。使用自动化脚本可以提高部署效率,减少人为错误。希望本文能对你的项目部署有所帮助。
2025-03-23 17:46:39
951
原创 创建WebSocket服务器:TouchSocket框架实践
WebSocket是一种基于HTTP协议的升级协议,允许客户端与服务器之间进行全双工通信。在TouchSocket框架中,WebSocket功能可以通过挂载实现,并支持多种插件化扩展。命名空间程序集。
2025-03-23 15:33:12
916
原创 在Ubuntu 22.04 中安装Docker的详细指南
二、安装步骤 更新系统 在安装Docker之前,首先需要更新系统的软件包列表,确保系统是最新的状态。使用curl命令获取密钥并添加到系统中: curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg 设置稳定版Docker软件源 设置Docker软件源,以便通过apt命令安装Docker。
2025-03-22 18:56:23
2902
原创 在ASP.NET Core中使用NLog:配置与性能优化指南
通过合理配置NLog,我们不仅实现了高效的日志记录,还将日志系统的性能开销降低了40%(根据实际压力测试数据)。建议根据具体场景组合使用异步处理、缓冲机制和日志采样等策略,在保证可观测性的同时最大化应用性能。NLog是一个灵活且高性能的日志记录库,在ASP.NET Core应用程序中广受欢迎。本文将介绍如何从零开始配置NLog,并通过优化配置提升日志记录性能。
2025-03-19 22:21:48
1485
原创 TouchSocket TcpService:构建高性能Tcp服务的终极利器
/ 接收到的数据data");// 回复客户端await ((ITcpSessionClient)client).SendAsync("服务端已收到消息!");// 继续执行后续插件TouchSocket的TCPService以极简的API、强大的扩展性和卓越的性能,重新定义了.NET TCP服务的开发体验。无论是物联网平台还是金融级实时通信系统,TCPService均能提供可靠的基础设施支持。立即探索示例项目,开启你的高性能服务开发之旅!扩展阅读如何实现WebSocket服务?
2025-03-19 20:50:17
1311
原创 TouchSocket包序列化模式:极致性能的序列化解决方案
包序列化模式通过手动或自动生成代码,直接将对象属性按顺序写入二进制流,避免了传统反射和动态代码生成的开销。极致性能:实测比MemoryPack快30%,比JSON快20倍。轻量数据:理论最小数据占用,减少网络传输与存储开销。全类型支持:支持自定义类型、集合、字典等复杂数据结构。对于第三方类型(如),可通过} }} }TouchSocket的包序列化模式通过极简设计与源生成技术,为.NET开发者提供了高性能、低开销的序列化方案。无论是实时通信还是大数据处理,均可显著提升效率。
2025-03-19 20:40:11
689
原创 深入解析 TouchSocket 插件系统架构与实践
TouchSocket 的插件系统是一组能够实现多播订阅、可中断的触发器,其核心功能是提供类似事件或委托的通知机制。该系统的设计灵感来源于 AspNetCore 的中间件,不仅具备与中间件相似的使用体验,还提供了更高的灵活性和自由度。set;
2025-03-19 15:51:07
1264
原创 高性能二进制序列化:FastBinaryFormatter
是一个高性能的二进制序列化工具,隶属于命名空间,并包含在程序集中。它以二进制形式对数据进行序列化和反序列化,具有优秀的内存利用率和性能表现。除了基础类型外,还支持自定义实体类、结构体、元组以及由这些类型组成的数组、字典和列表等复杂数据结构。通过自定义转换器,甚至可以实现对任意类型的序列化和反序列化。GitHub仓库Gitee仓库通过自定义转换器,可以解决所有类型的序列化与反序列化问题,并对特定类型进行优化。例如,以下类中只有两个intset;set;首先声明一个继承自的转换器类,并实现Read和。
2025-03-19 10:17:01
708
原创 深入解析 TouchSocket 内存池:高效管理字节数组的核心技术
命名空间程序集核心目标:解决高频字节数组创建与销毁的性能问题,借鉴微软ArrayPool并优化。BytePool作为TouchSocket的核心组件,通过高效的内存管理显著提升了网络通信性能。掌握其使用方法(如梯度分配、多线程同步)是优化TouchSocket应用的关键。建议开发者结合实际场景调整内存池参数,并通过开源仓库获取最新更新与社区支持。
2025-03-19 09:42:42
784
原创 探索TouchSocket:轻松上手的高性能网络通信库
通过本文,您已掌握TouchSocket的入门步骤:从环境配置到依赖安装,再到项目集成。协议扩展:实现自定义协议(如Dmtp)。插件开发:扩展WebSocket、静态文件服务器等功能。性能优化:利用异步调用、AOT编译提升效率。TouchSocket的灵活性和高性能使其成为网络通信场景的理想选择。无论是开发服务器后端、游戏联机功能,还是物联网设备通信,TouchSocket都能助您快速构建健壮的解决方案。
2025-03-19 09:36:44
1472
原创 TouchSocket|适配一个c++的Tcp自定义协议
然后再新建一个类,名为MyClientAdapter,继承CustomFixedHeaderDataHandlingAdapter,同时指定MyResponsePackage为泛型成员。该接口大概如下,其中Build方法,会指示成员应当如何构建数据。首先新建一个类,名为MyRequestPackage,同样继承MyBase,然后实现IFixedHeaderRequestInfo。此后,我们只需要发送MyRequestPackage对象,然后适配器内部会自动调用Build函数,然后执行发送。
2023-12-06 22:36:41
3185
3
原创 Vue入门学习笔记(1)
两者的区别就是前者可创建vue2项目,且可以自定义初始化组件,但编译启动较慢。后者作为vue3的专属工具,效率高,不需要设置很多不懂的参数。安装方法非常简单,使用cmd、powershell、或者win11的终端都可以。节点在国外,所以下载可能有问题,所以最好设置一下国内加速。下列安装类型均是全局安装,方便快捷,新手建议!首先,创建一个根目录,最好全英文。创建vue项目,可使用的工具有。然后在菜单->终端->新建终端。然后用vscode打开。,说明镜像配置成功。,说明镜像配置成功。
2023-05-18 11:09:23
812
原创 C# Task.Factory.StartNew和Task.Run的坑点
初学Task时,几乎所有的资料都说Task.Factory.StartNew和Task.Run是一样的,只不过Task.Run是简版,Task.Factory.StartNew可以设置更多参数。我找了微软的文档,并没有说明这种情况。如果有懂的人,可以交流一下。可以发现,Task.Factory.StartNew并没有等待Task完成,而是直接向下执行了。可万万没想到,我在实际使用时,却发现了一个运行不一致的小“bug”。上述代码在实际运行中,就发生的结果不一致。ok,一篇水文完成。
2023-03-06 10:01:46
2582
5
原创 C# 如何实现对“属性”的扩展
例如:一个Person类,他在项目初期,只有一个属性Age,可随着项目升级,可能需要Name,Address,甚至Price。继承,会让显式的Person类无法使用声明到子类的属性,到时候必须进行强制转换,而一旦继承分支多起来的话,将非常糟糕。属性是一个类的特征,随着开发的不断升级,这种特征可能在一直变化,有时候为了向下兼容,一般属性的数量都是直接递增的。而重新编译,带来的问题就更大了,总不能把属性都声明在父类吧。那么常规做法就是继承,然后在子类添加属性。当后续你需要什么属性的时候,自己声明扩展即可。
2023-02-16 13:54:34
5486
3
高仿微信即时通讯.zip
2020-06-23
C# 在Winform和WPF框架下使用IOCP通信模型时发生疑似内存泄漏现象
2021-11-29
用了我写的日志实现,大家一下子都发现了自己的bug👀 现在医院wifi挺快的。
2021-06-03
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅