这一页不写新东西,只做一件事:把我从 .NET 8 发布以来记的零散笔记按主题排一遍,方便我自己回头找。之所以要单独开一页,是因为我记笔记太随意,同一个知识点经常在两个地方各写过一遍,而且说法还不一样,每次找都要翻半天。
先说范围。这里收的是 .NET 8 和 ASP.NET Core 8 的笔记,EF Core 8 因为基本不会单独用,也一并放进来。公司那套内部系统 2024 年年中从 .NET 6 升到 8,升级过程里踩的坑占了这里相当一部分篇幅,另一部分是下班后看文档和源码记的,两部分混在一起,我没有刻意分开。
分类很粗糙,一共六个主题。分法是去年年底一次大扫除时定的,当时觉得挺清楚,现在看已经有点不合适了——比如「HTTP 与网络」里塞了两条其实属于配置的内容。下次整理我想调,但还没想好怎么调更好,所以先维持原样。
这个索引怎么更新
持续更新,但频率不高:平时看到新东西先丢进草稿,攒够一批再往这里搬,大概一两个月整理一次。每次整理我会改这一行——最后整理于 2026-07,上一版是 2026-05。这一版比上一版多了「数据访问」里的两条和「日志与可观测性」里的一条,「性能优化」那个主题仍然只有标题没有内容。
已经写成独立文章的条目,我在下面直接放链接,不重复内容。链接指向的都是本站的文章页,如果哪一天打开是空页面,多半是那篇还没生成或者被我撤了。
一、启动与配置
这一块我记的最多,因为改动最频繁的就是它。最小 API 的写法、配置源的加载顺序、还有 appsettings.json 被环境变量覆盖这种情况——有一次本地配的连接串死活不生效,查了一个多小时才发现是 Docker 里注入了同名环境变量,覆盖规则我记反了。
builder.Configuration的加载顺序:appsettings.json → appsettings.{环境}.json → 用户机密 → 环境变量 → 命令行,后者覆盖前者WebApplicationOptions里的 Args 和命令行 args 混用时的行为,升级那次踩到过一次- 判断环境我最后统一用
IsProduction(),之前项目里三种写法并存,读起来很累
二、依赖注入与生命周期
三个生命周期的概念我早就能背下来,但真正记住是靠一次内存泄漏的排查:Singleton 里注入了 Scoped 的 DbContext,服务跑一晚上内存涨到 2G,重启就好。过程写在依赖注入三种生命周期:一次内存增长的排查里,这里只留入口。
- Singleton / Scoped / Transient 的选取顺序,我自己总结了一条很粗糙的规则
IDisposable的释放边界:容器创建的由容器管,自己 new 的自己管ValidateOnBuild和ValidateScopes我只开了一个,另一个开了之后启动变慢,具体慢多少没量过
三、数据访问(EF Core 8)
EF Core 8 里我实际用上的新东西不算多,主要是 ExecuteUpdate / ExecuteDelete,以及复杂类型。EF Core 批量更新的几种写法与实测对比是这一块写得最细的一篇,12 万行的实测数字都在里面,2026 年 7 月还重测过一次。
ExecuteUpdate的版本差异:7 引入、8 允许在SetProperty里引用同实体其他字段、9 放宽了对 JSON 列的限制AsNoTracking不是万能的:查询本身慢的时候,加不加基本没区别AsSplitQuery我们项目里开了全局,事后我觉得有点草率,只是没出事就一直没改
四、HTTP 与网络
主要是 HttpClientFactory。为了弄明白「为什么不能每次 new 一个 HttpClient」,我把源码翻了一遍,记了十一条,其中三条是我自己的推测,都标了「不确定」。相关的还有读源码:HttpClientFactory 是怎么管理连接池的,以及被同事问过两次之后才写下来的中间件执行顺序。
- Handler 默认 2 分钟生命周期和连接池的关系
- 命名客户端(named client)与类型化客户端(typed client)我更常用后者
SetHandlerLifetime设成Timeout.InfiniteTimeSpan之后 DNS 不刷新,这条我至今没验证过
五、日志与可观测性
ILogger 的日志级别、结构化日志的字段命名、OpenTelemetry 的接入。OpenTelemetry 我只把链路配通了,指标那部分一直没搞利索,所以这里只有三条笔记,而且都是踩坑。这一块我打算今年下半年补,但同样的承诺去年也说过一次。
六、性能优化
目前一个字都没有。开这个标题是因为想系统过一遍,但每次打开都不知道从哪下手,拖了快半年。先留个空位提醒自己——也可能问题出在我把它想得太重,其实按实际碰到的性能问题一条条记就行,不必先搭框架。
两点说明
第一,这里记的都是我遇到过或者亲自验证过的,没验证过的我会写明,但仍然不敢保证每条都准确,发现错误欢迎写信告诉我,我会补在原文里并改这个日期。
第二,主题下面列的一些条目写着「打算写」,如果过了很久还是没有,多半是我放弃了,下次整理就会把它删掉,而不是一直挂着。