【.NET并发编程 - 05】SynchronizationContext 与死锁问题
New
05. SynchronizationContext 与死锁问题:揭开 ConfigureAwait 的神秘面纱
本章 GitHub 仓库:csharp-concurrency-cookbook ⭐
欢迎 Star 和 Fork!所有代码示例都可以在仓库中找到并运行。
🎯 本章导读
📌 本文目标:彻底搞懂 SynchronizationContext 的工作原理,理解异步死锁的根本原因,掌握 ConfigureAwait 的正确 ...
.NET Polly 重试、熔断、降级
New
一、安装依赖
# 基础包
Install-Package Polly
# HTTP 集成(推荐) Install-Package Microsoft.Extensions.Http.Polly
二、策略与代码
1. 重试(Retry):自愈瞬时故障
作用:网络抖动、偶发超时、5xx 等临时错误自动重试,避免单次失败影响业务。
常用模式:固 ...
[C# 笔记] 如何设置消息钩子 (以低级鼠标钩子为例)
New
简单入门
1. 准备函数[1][2][3]
[DllImport("User32")]
// 设置消息钩子
public static extern IntPtr SetWindowsHookExA(int idHook, HookProc lpfn, IntPtr hmod, int dwThreadId);
[DllImport("User32")]
// 移除消息钩子
public static extern bool UnhookWindowsHookEx(IntPtr idHook);
[DllImport("User32")]
// 继 ...
.NET 双缓存策略:本地缓存、分布式缓存
New
一、设计思路
1. 架构分层
一级缓存:IMemoryCache(进程内内存缓存,读写纳秒级,无网络开销)
二级缓存:IDistributedCache(Redis 分布式缓存,跨服务共享,毫秒级)
数据源:数据库 / 接口(兜底,避免缓存穿透)
2. 读写流程
读取数据(Get)
先查本地缓存,命中直接返回
本地 ...
.NET Redis 数据结构、分布式锁、缓存问题
New
一、Redis 常用 5 个数据结构
StackExchange.Redis 是 .NET 最主流客户端,所有结构都有对应 API。
1. String(字符串)
用途:缓存对象、计数器、分布式锁、简单配置
// 存对象(序列化)
await db.StringSetAsync("user:1", JsonSerializer.Serialize(user));
// 取对象
var user = Json ...
C# PDF转图片工具类 - 基于Docnet和SkiaSharp的实现
New
目录简介核心代码使用示例依赖包总结讨论
简介
在 .NET 开发中,PDF 转图片是一个常见需求。本文介绍如何使用 Docnet.Core 和 SkiaSharp 实现一个跨平台的 PDF 转图片工具类。
核心代码
using Docnet.Core;
using Docnet.Core.Models;
using SkiaSharp;
namespace PdfTools
{
/// <summary>
/// PDF 页面转图片工 ...
C# 实现 PDF 页面拆分:单页、指定页精准拆分
New
在处理 PDF 文档时,“拆分页面”可以说是最常遇到的需求之一。比如:一份几十页的报告,你只想要其中某一章;或者开会发的 PDF 会议纪要,需要按参会者姓名拆成单页分别发邮件;又或者你刚把一份扫描件导出来,希望每一页变成一个独立的 PDF 文件……这些场景我都遇到过。
今天我就用 Free Spire.PDF for .NET 这个免费库 ...
.NET 规范异常捕获 & 处理
New
一、核心规则
异常仅用于非预期错误,禁止用来做业务逻辑判断(替代 if/TryXXX)。
精准捕获:抓具体异常,禁止无脑捕获 Exception。
禁止空捕获 catch{}、吞异常、隐藏故障。
重抛异常只用裸 throw;,禁用 throw ex;(丢失堆栈)。
资源释放优先 using,少手写 finally。
优先使用 when 异常过滤器,缩小捕获范围 ...
【笔记】asp.net 中,为什么第二次压测的单核性能是第一次压测的 3.2 倍
作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!
cnblogs博客
zhihu
Github
公众号:一本正经的瞎扯
在压测一个 asp.net 实现的服务器时,发现第一次压测和第二次压测性能差距较大。
以下是我的分析,以及询问 ChatGPT 得到的答案:
C# 中基于 asp.net 的框架做了一个 web 服务。编译时 -publishAot=false ...
.NET 代码规范、CodeReview、 重构
一、.NET 官方 + 企业通用代码规范
1. 命名规范(最核心)
遵循 PascalCase / camelCase 严格区分,禁止拼音、无意义命名。
表格
类型规范示例
类、接口、方法、属性
PascalCase
UserService、GetUserById()
私有字段
_camelCase
_userRepository
方法参数、局部变量
camelCas ...
.NET SqlSugar 仓储、工作单元、服务层
1. 安装 NuGet
SqlSugarCore
2. SqlSugar 数据库上下文
using SqlSugar;
namespace Demo;
public class SqlSugarContext
{
public ISqlSugarClient Db { get; }
public SqlSugarContext()
{
Db = new SqlSugarClient(new ConnectionConfig
{
...
【.NET并发编程 - 04】 async/await 原理与性能优化:深入理解异步编程
04. async/await 原理与性能优化:深入理解异步编程
本章 GitHub 仓库:csharp-concurrency-cookbook ⭐
欢迎 Star 和 Fork!所有代码示例都可以在仓库中找到并运行。
🎯 本章导读
📌 本文目标:深入理解 async/await 的编译器魔法,掌握性能优化技巧,写出高效的异步代码。
在上一章中,我们系统学习了 Task API 的核 ...
[C# 开发] FolderIconFix
做了个小工具, 这个是用于将文件夹的图标路径设置为相对路径, 方便转移文件.
效果:
绝对路径转相对路径核心代码 (纯业余水平, 见丑了):
string[] tmp2; //吧路径切成腻子, 图标路径
string[] tmp3; //吧路径切成腻子, 当前文件夹路径
string[] tmp4; //截取之后保留的路径, 就是 ".\icon.ico" 的 "icon.ico" 这一段
tmp2 ...
SQL 优化、索引、执行计划、慢查询
一、SQL 为什么会慢?
根本原因 3 个:
没走索引 / 索引失效(全表扫描)
数据量太大(没分页、没过滤)
写法复杂(子查询嵌套、join 太多、排序分组无索引)
二、索引(SQL 优化的核心)
1. 什么是索引?
可以理解为书的目录:
没有索引 = 一页一页翻(全表扫描)
...
.NET SOLID、高内聚低耦合、分层
一、SOLID 原则(类与方法的设计规范)
SOLID 是 5 个面向对象设计原则的缩写,目的:让代码易维护、易扩展、少出 bug。
1. S – 单一职责原则 (Single Responsibility)
一个类 / 方法只做一件事,且只做好一件事
坏:一个类同时处理「用户注册 + 发送邮件 + 日志记录」
好:拆成 UserService ...
.NET 集成 SqlSugar、读写分离 、Redis
一、环境准备(NuGet 安装)
# SqlSugar 核心
Install-Package SqlSugarCore
# Redis 驱动 (StackExchange.Redis 官方推荐)
Install-Package StackExchange.Redis
# 缓存工具包
Install-Package Microsoft.Extensions.Caching.StackExchangeRedis
二、appsettings.json 配置
...
.NET 集成 日志 (Serilog/NLog)、AOP、简单限流
一、环境准备(新建 .NET Web API)
先安装所有需要的 NuGet 包:
必装包
# AOP 核心
Install-Package Autofac
Install-Package Autofac.Extras.DynamicProxy
Install-Package Microsoft.Extensions.DependencyInjection
# Serilog 二选一
Install-Package Serilog
Install-Package Serilog.AspNe ...
.NET 集成 Swagger、API 版本控制 、JWT 授权、权限设计
一、先安装必需 NuGet 包
# API版本控制
Install-Package Microsoft.AspNetCore.Mvc.Versioning
Install-Package Microsoft.AspNetCore.Mvc.Versioning.ApiExplorer
# JWT
Install-Package Microsoft.AspNetCore.Authentication.JwtBearer
# Swagger
Install-Package Swashbuckle.AspNetCore
  ...
.NET Web API、路由、模型验证、过滤器、全局异常
一、.NET Web API 是什么
ASP.NET Web API 是微软用于构建 HTTP 服务 的框架,专门用来开发:
前后端分离接口
移动端 API
微服务接口
它基于 Controller + Action 模式,返回 JSON/XML 数据,不返回页面。
二、路由(Routing)
路由的作用:把 URL 映射到控制器的方法
  ...
.NET 管道、中间件、配置系统、依赖注入 (DI) 生命周期
一、请求处理管道(Pipeline)
1. 是什么?
ASP.NET Core 处理 HTTP 请求的一条流水线。
请求进来 → 依次经过多个中间件 → 响应返回。
2. 核心特点
单向进入,双向返回
请求:从上到下执行中间件
响应:从下到上原路返回
顺序至关重要
先注册的中间件先执行
可 ...