自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(472)
  • 资源 (2)
  • 收藏
  • 关注

原创 c#联合类型,解决响应接口返回结果有多重变体

不同版本的 ASP.NET Core 和 OpenAPI 工具链,对多态类型的 schema 生成能力参差不齐,能不能产出带 discriminator mapping 的 oneOf 结构,别想当然,打开生成的文档亲自核对。说句公道话,联合类型不是银弹。一份合格的联合类型契约,至少要说清楚:有哪几种 JSON 形态、kind 的取值、每种结果对应的状态码,以及客户端遇到未知 kind 时该怎么办。只是告诉序列化器“有哪些类型”,JSON 里的值对不对、金额是不是负数,它一概不管,业务校验一行都不能省。

2026-10-10 15:37:11 181

原创 Native AOT 学习提纲

​。

2026-10-09 15:40:33 208

原创 轻量级的web api框架

FastEndpoints 是构建在 ASP.NET Core 管道之上的轻量 Web API 框架,核心是(Request–Endpoint–Response):一个 HTTP 接口 = 一个 Endpoint 类,自带 Request/Response DTO、FluentValidation 验证、依赖注入和 Swagger 支持。它定位介于传统 MVC Controller 和 Minimal API 之间——比 Controller 轻、比 Minimal API 好维护。

2026-09-29 17:35:48 30

原创 .net core服务限流解决方案

这个区别决定了它们对"突发"的态度完全不同。固定窗口计数在窗口切换的瞬间会放行(窗口末尾 100 次 + 窗口开头 100 次 = 200 次挤在一瞬间),而你的服务只扛得住 100 —— 这就是它最致命的问题。

2026-09-28 09:22:37 44

原创 探讨c# vue实现前端路由和界面按钮权限做表配置

—通常叫。你要的"配置界面"在成熟框架里就是「菜单管理 + 角色管理」两个页面,菜单、路由、按钮全在数据库里配,前端不再写死路由表。

2026-09-22 11:52:17 119

原创 .NET 使用 Refit 构建声明式 HTTP 客户端:从入门到生产实践

Refit 的价值不在"少写几行代码",而在于把 API 契约变成了一等公民——它集中、可见、可编译期校验、可测试。接口即契约、即文档。​ 新增一个端点就是加一行方法。Refit 只管生成调用,连接生命周期交给 HttpClientFactory。预期内的失败用分支处理,异常只留给真正的意外。从"把现有 HttpClient 代码里最啰嗦的那几个接口改成 Refit 接口"开始试,你会很快体会到差别。码字不易,如果您觉得我的文章对您有帮助的话,烦请您打赏一元,我买瓶水喝;

2026-09-19 14:02:27 460

原创 C# 界面卡顿:从定位到根治

界面卡顿这事,定位比优化重要。绝大多数卡顿不需要高深算法——要么是重活干错了线程,要么是死锁,要么是刷新太频繁。先用看门狗把"卡多久"量化出来,再用探查器抓到那一条阻塞栈,问题基本就解决了一半。UI 线程只做两件事:更新控件、分发命令。await 一路到底,绝不 .Result。后台多快都行,UI 定频出帧。码子不易,如果您觉得我的文章对您有帮助的话,烦请您打赏一元,我买瓶水喝;

2026-09-18 18:08:52 483

原创 c#上位机开发如何使代码更健壮

要让 C# 上位机代码更健壮,不能只靠写几个 try-catch。异常有兜底、资源有释放、通信有超时重试;线程安全用合理的数据结构,UI 不卡不假死;状态用状态机管理,配置不写死;日志全量记录,看门狗自动恢复;解析协议先校验后解码,模块解耦依赖注入;再加上单元测试和规范部署。即使出现了 bug,系统也能自动恢复、留下线索、让操作者知道发生了什么,在最短时间内重新投入运行。码子不易,如果您觉得我的文章对您有帮助的话,烦请您打赏一元,我买瓶水喝;

2026-09-18 14:35:40 306

原创 KingSCADA 学习总览

这是一份系统的 KingSCADA 学习大纲,从入门到工程落地,分七个阶段。每个阶段包含目标、核心内容、练习任务,并在关键处标注版本差异。

2026-09-17 15:54:59 92

原创 kingscada是什么 能做什么

KINGSCADA 通常指,一套国产中高端 SCADA(数据采集与监视控制)组态平台,用来把现场 PLC/仪表/RTU 的数据采上来、做画面监控、报警、历史存储和远程调度。它定位高于亚控自家的“组态王/KingView”,更偏厂级、集团级、跨厂区和大点位项目。

2026-09-16 14:06:09 210

原创 手写观察者模式:C#上位机状态通知的优雅解法

定义:定义对象间一种一对多的依赖关系,当一个对象状态改变时,所有依赖它的对象都会收到通知并自动更新。两个核心角色:角色别名职责Subject​主题 / 被观察者 / 发布者维护观察者列表,提供注册/注销,状态变化时通知Observer​观察者 / 订阅者定义接收通知的接口(Update 方法)注册(Attach)→ 变化 → 通知(Notify)。观察者模式的本质,是把"谁关心我变了"这个问题,从「编译期硬编码」变成「运行期动态注册」。简单场景用event(语言级、够用);

2026-09-11 16:45:42 517

原创 C# + 工业相机 SDK 的采集代码模板

dotnet run,用统一接口屏蔽了品牌差异——换相机只换实现类,业务代码不动。

2026-09-10 16:43:14 322

原创 学习工业相机的大纲

把前两步做扎实,算法只需 20% 的力气就能达到 80% 的效果。

2026-09-10 16:20:15 109

原创 C#上位机必备:生产者-消费者模式与消息队列,从入门到实战

想象一个场景:你在食堂打饭。•厨师(生产者)不停炒菜,把菜放到窗口•窗口(消息队列)放着做好的菜,作为缓冲•你(消费者)端起盘子打菜吃饭厨师不用等你吃完才炒下一盘,你也不用等厨师炒完才开始吃。各干各的,互不等待——这就是生产者-消费者模式的核心思想。放到上位机里就是:•生产者:串口 / TCP 采集线程,从 PLC、传感器读数据•消息队列:内存中的缓冲区,存原始数据帧•消费者:解析、存储、UI 显示线程,按自己的节奏处理数据为什么一定要用消息队列?四个理由:1.解耦。

2026-09-09 09:34:37 437

原创 ASP.NET Core 8 Minimal API 认证示例,核心用 BCrypt.Net​ 做密码哈希 + JWT​ 做身份认证。

return Results.Ok(new { username = name, message = "已通过认证,这是你的个人数据" });Console.WriteLine($"但都能校验通过: {BCrypt.Verify(password, hash2)}");return Results.BadRequest(new { message = "用户名和密码不能为空" });// 内存用户仓储(演示用,生产请换 EF Core + 数据库)// ===== 4. 受保护接口(需 JWT)=====

2026-09-08 09:24:28 212

原创 BCrypt.Net是做什么的

BCrypt.Net 是 .NET 里用来“安全哈希用户密码”的库——它把 bcrypt 算法封装成简单 API,自动加盐、支持可调慢度,让开发者无需自己处理加密细节,就能合规、抗暴破地存储密码。

2026-09-08 09:15:05 19

原创 推荐一款.net 日志格式化插件RuoVea.ExLog

/ 按类型获取日志操作对象_log.Info($"处理付款: {amount:C}");_log.Debug($"付款明细: ...");// 按字符串名称获取日志操作对象orderLog.Warn("订单模块: 检测到重复提交");orderLog.Error("订单模块: 回调验签失败");通过GetLogger获取的Log对象仍然是log4netILog的轻量包装,不持有线程池调度逻辑(即同步写入 log4net,而非Task.Run调度)。如果追求异步写入,请使用。

2026-09-07 08:54:13 213

原创 C# 调用 .NET(Core)Web 服务混用:常见问题与 .NET 6~10 正确写法

C# 混合调用 .NET(Core)Web 服务的核心规则是“进程边界隔离 + 契约层下沉到 netstandard2.0”:.NET Framework 端通过HttpClient调用运行在 net6~net10 上的 ASP.NET Core 服务;Web 服务自 .NET 6 起统一使用 Minimal Hosting(app.Run()),.NET 8 引入 Keyed DI 与 TimeProvider、.NET 9 加入与 LINQ 新算子、.NET 10 正式支持 C# 14field。

2026-09-05 10:31:44 603

原创 推荐一款.net 配置类库RuoVea.ExConfig

Configset;set;set;set;set;set;set;set;set;set;

2026-09-04 10:02:46 82

原创 推荐一款.net SqlSugar ORM 一站式扩展库 RuoVea.ExSugar

集成 DI 注册、DbContext/Repository 模式、审计字段自动填充、全局查询过滤器、工作单元事务、差异日志记录、SM2 连接字符串加密,覆盖从 DataExecuting AOP 到分页查询的完整数据访问层抽象。为 .NET 开发者提供 SqlSugar ORM 的开箱即用增强封装,通过 DI 容器统一管理数据库连接、审计字段、查询过滤器和事务边界。建议通过环境变量、密钥管理服务(如 Azure Key Vault)或加密的配置文件注入。重载以启用完整功能(差异日志、过滤器等)。

2026-09-03 14:28:22 414

原创 推荐一款.net工具RuoVea.ExUtil

/ 当前 UTC+8 区 Unix 时间戳(秒)// Unix 时间戳 → DateTime// DateTime → Unix 时间戳(秒)⚠️已知缺陷硬编码,仅适用于 UTC+8(中国时区)场景,非东八区环境需自行处理。文件: Validate/Attributes/EmailAttribute.cs构造参数: msg(自定义错误消息)实际: 构造函数接收 msg 参数后未使用,始终返回硬编码的英文错误消息。

2026-09-03 08:58:43 353

原创 C# 使用 FreeSql 深度指南:重点拆解内核逻辑

FreeSql 是国产 .NET ORM(作者 dotnetcore/2881099),定位与 EF Core 不同——。本文不堆砌 CRUD 示例,重点放在。

2026-09-02 09:46:08 339

原创 AI现在能写大部分场景的代码,程序员应如何做才能保证自己不被淘汰

AI 时代的核心竞争力,不是"写代码更快",而是"知道该让 AI 写什么、写完怎么验证、上线后谁来负责"。把编程重新定义为四层:层级内容AI 能否做你的价值L1 实现​写函数、调 API、改样式✅ 大部分审查、修改L2 设计​架构、模块划分、接口设计🔶 辅助主导​L3 定义​需求澄清、业务建模、取舍决策❌ 不能核心​L4 负责​上线、运维、兜底、承担后果❌ 不能不可替代​AI 擅长 L1,你要占领 L2/L3/L4。AI 替代的是"代码打字员",不是"软件工程师"。

2026-09-01 15:26:18 353

原创 EF Core 性能调优深度实战:从慢查询到毫秒级响应

写 LINQ 时,脑子里想的是 SQL。N+1 是头号敌人​ → Include 或 Select 投影只读场景必加 AsNoTracking​ → 内存减半、速度翻倍批量操作绕过 ChangeTracker​ → ExecuteUpdate/Delete 或 Bulk 库Include 过深用 AsSplitQuery​ → 避免笛卡尔积分页用键集不用 Skip​ → 索引友好复杂查询直接写 SQL​ → FromSqlRaw 不丢人EF Core 不是性能瓶颈,

2026-08-31 10:37:10 319

原创 拆解ASP.NET Core 底层源码!从零手写

你有没有过这种感受:用了好几年ASP.NET Core,CRUD 写得飞起,但一碰到底层问题就懵?中间件执行顺序到底是怎么控制的?依赖注入容器内部是怎么创建对象的?路由匹配为什么有时候不按预期工作?为什么同样的代码,换个环境性能差十倍?很多开发者停留在 "会用" 层面,遇到复杂场景就束手无策。真正的差距,不在于你用了多少中间件,而在于你是否理解框架底层的设计思想。

2026-08-27 11:03:55 542

原创 DOTNET 鉴权系列- JWT 会话撤销与主动登出

我第一次知道这个方法,是在极客时间上听一个老师讲的,瞬间豁然开朗,因为颁发和校验token时都是使用秘钥来校验的,换密钥能让所有已签发的 Token 瞬间全部失效,但它属于终极大招,太猛了不分敌我,全部干掉的,实际中应该没人这么做吧,除非密钥泄露,一些重大安全事件、需要全站强制登出才会这么干。如果使用标准流程下实现,哪怕主动退出,强制踢出,或者顶掉了登录,我们再次拿着旧的Token去请求接口,是依然能通过鉴权的,从真实业务和系统安全上来说,我都主动退出了,拿去请求接口怎么还可以,服务端不是应该拒绝的吗?

2026-08-27 09:34:41 124

原创 C# GC 调优实战指南:从原理定位到性能优化

监控指标 → 定位瓶颈 → 代码优化 → 配置调优 → 验证效果↑ │优先级:代码优化 > GC 配置 > 手动干预减少分配比优化回收更有效池化(ArrayPool/ObjectPool)是性价比最高的优化手段不要过早优化,先用数据说话GC 调优不是一次性工作,而是持续观测 → 迭代优化的过程。掌握PerfView三件套,你就能定位 90% 的 GC 问题。如果您觉得我的文章对您有帮助的话,请您打赏一元,我买瓶水喝;您的支持将是我继续分享的无线动力!

2026-08-26 09:09:27 304

原创 一个项目没有源码,如何进行升级改造和维护

仅针对C/C++原生程序,汇编级别修改。工具:IDA Pro、x64dbg、OllyDbg、Cheat Engine;只能做简单修改:弹窗去除、简单逻辑跳转、字符串修改;复杂业务逻辑无法维护,极易引发程序崩溃;只建议应急临时修复,绝不用于正式生产环境长期改造。

2026-08-24 15:28:53 383

原创 C# 中 Task.Run() 完全指南:从原理到避坑实践

Task.Run()是 C# 异步编程中最常用的工具之一,但它不是万能药它解决的是 CPU 密集型工作的线程池调度问题它不解决 I/O 等待问题(那是 async I/O 的事)它在 ASP.NET Core 中的价值被严重高估它在 WPF/WinForms 中是保持 UI 响应的利器如果您觉得我的文章对您有帮助的话,建议您打赏一元,您的支持将是我继续分享的无线动力!

2026-08-22 11:10:35 627

原创 C# 委托(Delegate)完全指南:从基础到实战

委托是一种类型安全的函数指针,它定义了方法的签名(返回值类型 + 参数列表),可以持有符合该签名的一个或多个方法的引用,并在需要时调用它们。// 定义委托// 符合签名的方法// 使用类型安全:编译器检查方法签名是否匹配可以指向静态方法、实例方法、匿名方法、Lambda 表达式支持多播(Multicast),即一个委托变量可以绑定多个方法本质是的子类,继承自委托是 C# 中将方法作为参数传递的核心机制,它让代码从"硬编码调用"进化为"行为注入"。掌握委托,你就掌握了:事件驱动编程。

2026-08-22 09:59:10 111

原创 C# 实战:Clean Architecture + DDD 架构全解析

Clean Architecture 决定“依赖往哪指”,DDD 决定“业务放哪写”。如果您觉得 我的文章对您有帮助的话,建议您打赏一元,我买瓶水喝,您的支持将我继续创作的无线动力!

2026-08-20 16:16:03 369

原创 C#关于同步方法里面调用异步方法的探究

我在写代码的时候(.net core)有时候会碰到void方法里,调用async方法并且Wait,而且我还看到别人这么写了。而且我这么写的时候,编译器没有提示任何警告。但是看了dudu的文章:一码阻塞,万码等待:ASP.NET Core 同步方法调用异步方法“死锁”的真相 了解了,这样写是有问题的。但是为什么会有问题呢?

2026-08-20 15:49:26 143

原创 Controller 加了 [Authorize] 授权该怎么设计

需要提醒的是,灵活性和安全性往往是一对需要权衡的目标:权限越是动态可配置,越需要在缓存策略、变更生效速度、审计日志上多花心思,否则"谁在什么时候被授予了什么权限"这件事本身也会变得难以追溯,反而带来新的风险。

2026-08-19 14:28:45 166

原创 六大原则是必备基本功

一个类、接口或方法有且只有一个引起它变化的原因,只负责一项职责。通俗来讲:不要让一个类 "身兼数职",既管数据存储、又管业务校验、还管日志通知。职责越多,耦合越重,修改一处就可能引发连锁故障。对扩展开放,对修改关闭。新增功能时,应该通过扩展已有代码来实现,而不是修改原有稳定运行的代码。这是架构设计的灵魂,也是应对需求频繁变更的核心手段。子类可以无缝替换父类,程序行为不发生改变、不产生异常、不违背原有逻辑预期。子类可以扩展父类功能,但不能改变父类原有功能。

2026-08-19 11:38:12 235

原创 ASP.NET Core MVC + Redis 实战缓存方案,优化列表查询,开发高并发订单管理系统

只缓存高频、相对不频繁变化的数据,实时性要求极高的场景慎用。

2026-08-19 10:08:37 459

原创 c#WPF开发常见问题

现象:自定义控件时,属性绑定不生效,或者 XAML 报错。原因:依赖属性的包装器(Wrapper)里写了逻辑,或者注册时参数写错。解决方案不要在 CLR Wrapper(get/set)中写逻辑:WPF 在 XAML 解析时有时会绕过 Wrapper 直接调用。使用​ 标准模板。// ❌ 错误写法:在 Wrapper 中写逻辑set// 警告:XAML 可能不会调用这个 Setter!// 这行代码可能永远不会执行// ✅ 正确写法:使用 PropertyChangedCallback。

2026-08-13 15:48:36 203 1

原创 .NET LINQ 性能优化实战:节省查询

需要多次遍历?.ToList()先物化。一条链只跑一次。升级 .NET 9。数组和 List 上的AnyCountFirst自动走 Span 快速通道,零分配 + 7 倍速。判空用Any(),别用。一个短路,一个全量。.Where()永远写在.Select()前面。先过滤再投影,无效分配大幅减少。热路径上不要迷信 LINQ。Span<T>+ 手动循环可以再榨 20 倍性能。但只在 Benchmark 证明有必要时才这样做。LINQ 不是慢的语言特性,它是表达能力与执行效率之间的一个选择。

2026-08-12 08:57:26 412

原创 ASP.NET Core MVC + Redis 实战缓存方案

只缓存高频、相对不频繁变化的数据,实时性要求极高的场景慎用。

2026-08-10 15:37:36 234

原创 c#手写一个简易 DI 容器

Singleton,Transient_logger.Log("订单已创建");手写 DI 容器的本质:用反射 + 递归 + 缓存,把“new 对象”这件事交给框架。

2026-08-08 11:55:52 155

原创 C# 反射(Reflection)详解:从原理到实战

反射是 .NET 提供的一种机制,允许程序在运行时动态地获取类型信息(Type)、访问元数据(Metadata),并动态创建对象、调用方法、读写属性/字段,甚至操作私有成员。反射 = 运行时的类型自省 + 动态操作// 不知道 MyClass 是什么,也能创建对象并调用方法。

2026-08-08 11:52:26 196 2

.net core服务限流样例源码

架构上的三个决定 1. BucketMath 抽成纯函数 内存版和 Redis 版共用同一套计算,保证单机和分布式行为完全一致。这也是为什么它能直接单元测试——不用起 Redis,不用 mock 时间。 2. 桶 key = {规则名}:{身份} 同一 IP 在 login 规则和 default 规则下有各自的桶,互不干扰。身份前缀是 ip: / user: / ak:,看日志一眼就知道按什么分的。 3. Redis 用 Lua 保证原子 「读-算-写」三步不做成原子,高并发下必然出竞态:A 读到剩 1 个,B 也读到剩 1 个,两个都放行。而且 Redis 挂了是 fail-open(记日志后放行)——限流组件不能把整个服务拖垮。 最容易出事的两个地方 中间件顺序:限流必须在 UseAuthorization() 之后,否则 ctx.User 还是空的,"按用户分组"会静默退化成按 IP——功能看起来正常,实际上是错的。 反向代理:Nginx 后面 RemoteIpAddress 拿到的是内网 IP,所有用户共用一个桶。但反过来,如果不限制可信代理,客户端伪造 X-Forwarded-For 就能绕过所有按 IP 的限流。我在 Program.cs 里用 KnownProxies.Clear() 是为了演示方便,生产必须改成限定内网网段,README 里标了红。 另外 X-User-Id 这个演示头也要删——任何人都能伪造它。 关于内置 RateLimiter .NET 8 的 PartitionedRateLimiter 单实例场景其实更省事(少写很多代码),我在 README 里给了对照和选型表。本项目自己写是为了换这三样:分布式、任意 cost 权重、能查桶余量(/api/ratelimit/my-buckets)。 排查"为什么没限住"最快的手段是 curl /

2026-09-28

氧化炉进出口绕棍巡检说明书

氧化炉进出口绕棍巡检

2024-10-19

求职c#软件开发工程师职位

求职c#软件开发工程师职位

2024-10-17

Fastreport标签设计器

一款解压即用的标签设计器,可设置常用标签的模式

2024-07-12

SMT设备说明书-涵盖使用保养等功能

SMT设备说明书-涵盖使用保养等功能

2024-07-02

web前端开发技术讲解

主要讲解web前端开发技术,从前端角标、样式、javasript详细讲解

2024-06-28

win7系统设置共享文件步骤

win7系统设置共享文件步骤

2024-06-13

eas映射数据结构不可获取的两个dll库

本包包含两个eas映射数据结构不可或缺的dll,分别为EAS.Data.dll和EAS.MicroKernel.dll

2024-06-11

基于WPF自主开发插件

XXXXXXXXXXXXXXX

2024-04-11

基于可编程控制器最新资料

基于可编程控制器最新资料

2024-06-11

图片识别(只限猫和狗)

利用机器学习算法,构建模型,识别动物

2024-06-04

excel宏命令调试安装包

WPS系统宏命令调试安装包

2024-05-28

一款开源.NET WPF界面库介绍

一款开源.NET WPF界面库介绍

2024-02-27

设备信息话采集的基本要求

设备信息化采集的基本要求: 1.什么是设备信息护化 2.实现设备信息化的集中方式 3.不同设备实现信息化的方式

2024-02-19

西门子840D系列机床可测试参数整理

西门子840D系列机床可测试参数整理

2024-01-16

基恩士SR Web端软件使用步骤

基恩士SR Web端软件使用步骤

2024-01-16

基恩士SR SDK 使用步骤

基于基恩士SR SDK进行相机开发步骤

2024-01-16

基于基恩士扫码枪实现7mm条码注意事项

基于基恩士扫码枪实现7mm条码注意事项

2024-01-16

win10虚拟机黑屏的几种解决方案.docx

win10虚拟机黑屏合资源共享创建方法

2021-09-23

9 高级语言ADS通讯.ppt

ADS通讯

2021-09-23

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除