.NET 11 Preview 2 架构演进:AOT、动态PGO与GC改进实践
.NET 11 Preview 2 放出来的时候我第一反应不是去翻新 API 列表而是先看运行时仓库里的架构改动。这次 Preview 社区讨论最热的点居然不是某个炫酷的 C# 语法糖而是 AOT 成熟度、动态 PGO、GC 暂停时间这一类偏底层的东西。这个信号本身就挺有意思说明平台演进的重心已经从“加功能”变成了“改底盘”。这篇文章不打算做流水账式的新特性盘点而是从架构演进和技术深度的角度把这次 Preview 2 的关键方向拆开讲。会谈一谈版本节奏意味着什么NativeAOT、动态 PGO、区域化 GC 这些词背后到底在解决什么问题再结合我最近用模拟服务端项目做迁移评估的实测记录给出一份可以照着做的参数配置和问题排查清单。无论你是在犹豫要不要升级还是想提前评估性能收益和兼容性风险这篇应该都能省下你不少试错时间。1. 版本节奏与 Preview 2 的定位1.1 偶数 LTS、奇数 STS版本节奏本身就是架构信号很多人看 .NET 版本会陷入一种“每个大版本都要学习新东西”的焦虑但实际上从版本策略来看奇数版本是标准期支持STS偶数版本是长期支持LTS整体节奏非常稳定。这个节奏意味着奇数版本更像是偶数版本的前哨站它承担了引入新架构能力、试探生态兼容性的任务。.NET 11 是一个奇数版本定位上更偏向于“把上一轮 LTS 没来得及打磨透的东西继续推深”。所以你看 Preview 2 的改动清单会发现大量内容其实是在完善 .NET 10 时期铺下的基础AOT 的更多场景适配、JIT 的反馈优化、GC 在低延迟场景下的表现。理解这个定位很重要因为如果你把 Preview 版本当成“下一个生产版本”去评估很容易被预览期的波动误导但如果你把它当作架构风向标能提前看到未来 LTS 版本会主推哪些能力。我个人的习惯是奇数版本的 Preview 阶段重点看三件事——运行时模块的目录结构变化、JIT 和 GC 的默认参数调整、SDK 对发布工作流的支持程度。目录结构变化代表模块边界的重新划分默认参数调整代表官方对典型负载的判断发生了变化发布工作流则决定了这些能力能否真正落进 CI/CD 里。1.2 Preview 版本是评估工具不是功能预告Preview 2 这类版本最大的价值不在于“多了哪几个 API”而在于它可以让你低成本验证一个假设这套架构改动放在我的业务场景里到底能不能带来收益。拿数据库连接池来打比方生产环境的连接池不会因为你换了新版本就自动变好但 Preview 版本让你有机会提前把新 GC 策略、新的 JIT 优化开关挂到模拟流量上跑一遍观察延迟分布和内存曲线。等 LTS 出来的时候你的评估报告早就写完了而不是到那时候才手忙脚乱地补测试。所以下面几节的内容我尽量按照“这个改动在解决什么问题 → 它在架构层面动了哪里 → 你在实际项目中应该怎么验证”这条线来讲而不是单纯堆特性。2. 架构演进的三大主线AOT、JIT、GC2.1 NativeAOT从“实验选项”走向“默认候选”NativeAOTAOT 发布代表的是“预先编译静态链接无运行时 JIT”的部署形态。这个概念本身不新鲜但这次 Preview 2 里的变化在于它正在从“需要手工折腾的偏门选项”变成“有明确取舍方案的常规选项”。先解释一下两种模式的核心差异传统 JIT 模式程序集IL随应用发布运行时按需用 RyuJIT 编译成机器码。优点是对程序集边界友好、反射等动态特性基本可用缺点是冷启动需要现场编译内存占用偏大。NativeAOT 模式发布时直接把 IL 编译成目标平台的机器码静态链接成一个文件可选。启动时间能压到毫秒级内存占用显著下降但代价是动态性受限反射默认裁剪、Reflection.Emit不可用、动态加载程序集需要额外处理。在 Preview 2 里让我比较在意的是 AOT 在一些库和框架层面的支持继续推进。比如反序列化场景源生成器的覆盖范围越来越大依赖注入容器和日志系统也都在往源生成方向走。这背后其实是一套组合拳运行时动态性被限制的地方全用编译期代码生成来补位。你可能要问既然动态性受限那 AOT 的优势到底有多大给你一个我在某网关组件上实测的大致数据JIT 模式下冷启动高并发压测时P99 延迟前 5 秒会有明显抖动进程内存稳定在 320MB 左右换成 AOT 发布后启动到接受流量耗时从秒级降到几十毫秒稳态内存在 180MB 左右。对容器调度频繁的服务这种差距非常明显。但需要注意这只是特定负载下的数据AOT 对长时间运行的 CPU 密集任务未必比 JIT PGO 更快后面我会展开。2.2 动态 PGO 与 OSR让 JIT 模式继续发挥价值很多人以为 AOT 起来了JIT 就该退场这是一个误解。实际上JIT 模式也在进化而且进化方向恰恰是 AOT 不太好复制的基于真实运行数据做动态优化。这就是动态 PGOProfile-Guided Optimization按配置文件优化。动态 PGO 的核心机制是分层编译方法第一次执行时先快速生成未经深度优化的代码让程序尽早跑起来。运行时持续收集这个方法的执行次数、分支行为、调用目标的实际类型。当方法热度超过阈值后台线程重新用 RyuJIT 编译一版带优化信息的代码切换执行。与 OSROn-Stack Replacement栈上替换配合后即便是一个长时间运行的大循环也能在循环执行中途被“无缝升级”到优化版不用等循环结束。这在数值计算、序列化、压缩这类热点集中且循环时间长的场景里尤其重要。动态 PGO 带来的另一个能力是去虚拟化。比如接口调用IFoo.Run()运行时发现 99% 的实际对象都是FooImpl编译优化版代码时就可以直接生成对FooImpl.Run()的调用省掉虚调用查表开销。这种优化放在业务代码里聚合后很可观。但动态 PGO 也有代价统计埋点本身有开销、后台重编译需要额外 CPU、方法热度和内联决策在不同负载下表现可能差异很大。所以 Preview 2 里相关的调整重点往往不在“增加新的优化项”而是在“让触发条件更稳避免优化震荡”——这一点从运行时对分层编译计数器的调参上能感受到。2.3 GC 区域化与暂停时间控制低延迟场景的深入改造GC 这块我重点说下区域化方向的推进。传统 Workstation GC 的做法是整堆管理回收时容易产生长暂停Server GC 按核心分区吞吐高但内存占用也高。区域化 GC 的思路更像把堆划成固定大小的区域Region以区域为粒度跟踪对象存活状态收集器可以更精确地判断哪些区域值得回收、哪些区域短期不用动。这个设计的直接收益是内存释放更平滑GC 暂停时间更可控。对需要稳定低延迟、又不想承担 Server GC 内存开销的服务这个方向很有吸引力。Preview 2 里能看到这一能力的继续打磨重点在碎片整理策略和动态调整堆大小DATAS的配合。这里要提醒不要看到“低延迟”就盲目切 GC 模式。GC 行为跟对象分配速率、晋升速率、对象图结构强相关必须用你自己的流量画像去压测。GC 优化最忌讳直接拿别人的结论套在自己项目上。3. 关键参数与实操配置详解3.1 三种发布模式怎么选发布模式的选择本质上是对三个约束条件的权衡启动速度、内存占用、动态特性。常见的三种形态是形态启动速度内存占用动态特性典型场景JIT框架依赖慢高高传统 Web 服务、插件化系统ReadyToRunR2R中中中折中方案减少首帧 JIT 时间NativeAOT快低低容器服务、命令行工具、IoT、AI 推理边缘端选择的方法很简单如果你的应用生命周期短函数计算、批量任务或启动频繁容器冷启动优先考虑 AOT如果你的应用重度依赖反射和运行时代码生成先评估源生成器能不能替代替代不了就留在 JIT 模式。对于 R2R它是 AOT 和 JIT 之间的过渡预生成本机代码但仍保留 JIT 作为补充。它改善的是启动时间内存上帮助有限。这个模式适合那种“不想牺牲任何动态性但想减少启动抖动”的项目。3.2 AOT 发布参数的计算与取舍AOT 发布最常用的是通过项目文件或命令设置发布选项。我以一个命令行工具项目为例发布命令一般是dotnet publish -c Release -r linux-x64 -p:PublishAottrue -p:PublishTrimmedtrue -p:PublishSingleFiletrue几个参数的选择逻辑PublishAottrue启用 AOT 编译。PublishTrimmedtrue裁剪未使用的程序集。注意 AOT 本身会触发裁剪这个开关更多是显式控制裁剪行为的细节。开启后如果遇到反射场景报 MissingMethodException说明该类型被裁剪了。PublishSingleFiletrue把所有 native 代码和托管程序集打成一个文件方便容器镜像复制。如果你想保留某些反射元数据可以用 TrimmerRootAssembly 或 DynamicDependency 标记。比如[assembly: DynamicDependency(DynamicallyAccessedMemberTypes.PublicConstructors, typeof(MyPlugin))]这个标记告诉裁剪器这个类型的所有公共构造函数必须保留。这类标注在有反射需求的场景几乎是必加的。另一个经常被忽略的参数是StackTraceSupport。启用堆栈跟踪支持会在裁剪和 AOT 时保留更多符号信息增大体积但排查线上问题时非常好用。CI 里如果不需要详细堆栈可以关掉以减小体积-p:StackTraceSupportfalse做决策时不要只盯着“体积越小越好”要看你有没有远程日志和符号服务器能支撑你分析精简后的堆栈。没有这个基础设施省体积省出来的麻烦会更多。3.3 性能观察工具链怎么搭评估 Preview 2 的架构改动光靠看文档没用要跑数据。我的最小工具组合是三件套dotnet-counters监控进程级别的 GC 次数、内存总量、CPU 占用。dotnet-trace采集事件流水线查看 JIT 编译事件、GC 暂停时间、线程调度。dotnet-gcdump抓托管堆对象分布定位内存泄漏和碎片问题。压测时我建议按这样的步骤先用dotnet-counters记录 5 分钟基线数据确认 GC 频率和内存趋势。再用dotnet-trace抓一次包含 JIT 事件的 profile观察哪些方法触发了优化重编译重编译是否造成抖动。运行完业务压测后用dotnet-gcdump抓堆快照看 Survivor 是不是主要集中在少数对象上。这三个命令在 Preview 2 对应的 SDK 里都能直接对接诊断管道配置成本很低。唯一需要注意的是不同诊断工具版本与运行时版本不匹配时容易出兼容问题尽量用 SDK 自带的同名工具版本。4. 从 Preview 2 视角看项目迁移与成本评估4.1 迁移评估的六个步骤如果你是一家团队的技术负责人想判断“.NET 11 值不值得提前跟进”我建议按这六步来盘清反射和动态代码生成的使用点。这是 AOT 迁移的最大风险项先统计 IL2026 这类裁剪警告的数量。拉出项目里引用的第三方库看有没有还不兼容 AOT 的。去仓库里搜PublishAot和IsAotCompatible相关配置是速度最快的办法。跑一遍现有测试套件重点看序列化、依赖注入、配置绑定这类容易暗藏反射的模块。做一次 AOT 试发布记录裁剪警告和编译错误清单。在试发布产物上跑性能和功能验证。汇总评估报告明确“哪些模块可以 AOT、哪些模块必须留在 JIT、哪些库需要替换”。这个流程看似繁琐但绝大多数升级事故都出在“没盘点动态特性使用点”和“没验证第三方库兼容性”这两步上。4.2 一个服务端模拟项目的实测记录为了验证这次 Preview 2 的架构调整我拉了一个代号的“订单状态机服务”模拟项目做迁移测试。项目结构不复杂一台 ASP.NET Core 服务接收 HTTP 请求通过状态机流转订单状态用内存队列做缓冲周期性刷入模拟存储。这个负载的特点是短事务、频繁小对象分配、队列热点集中。先做 JIT 模式的基线压测稳态吞吐 4200 req/sP99 延迟 65ms进程内存 280MBGC 频率每秒 1.2 次Gen0。然后切到 AOT 发布同样的压测参数下稳态吞吐接近 4150 req/sP99 延迟 62ms进程内存 195MBGC 频率下降到每秒 0.7 次。这里有两个判断要点吞吐和延迟基本没差说明这类短事务负载没有被 JIT 的优化能力拉开差距。真正的差异在内存AOT 少了 30% 左右。对单实例来说 85MB 不起眼但如果你跑 200 个实例就是 17GB 的差距成本层面会开始有感觉。GC 频率下降推测跟内存占用变低直接相关分配总量少了触发回收的自然就少。不过我也测了一个偏计算型的模块用某图像处理 Demo 做 100 万次像素操作纯 CPU 密集。JIT 模式开启动态 PGO 后执行时间反而比 AOT 快 8% 左右。结论很清晰AOT 的优势在资源占用和启动速度不在峰值吞吐。想靠换发布模式做 CPU 优化方向不对。4.3 API 变化与兼容性热点Preview 版本必然带来一些 API 调整迁移时最常被卡住的往往不是框架 API而是“隐式行为变化”。比如某些 API 的访问修饰符变化会引发生成代码不兼容某些默认参数调整会让同一套代码在新版本上表现不同。处理办法是先跑 API Compat 分析器得到一份差异清单。然后按“公开 API 删除/改名 vs. 行为变更 vs. 增补 API”三档分类处理。删除和改名是机械问题改代码就行行为变更必须靠测试覆盖特别关注默认值、异常类型、线程安全语义这一类隐含契约。5. 常见问题与排查技巧实录5.1 AOT 下反射失效别硬撑找源生成器这是 AOT 迁移里最经典的问题。典型表现为本地 JIT 运行一切正常AOT 发布后某个模块报MissingMethodException或返回空值。根本原因是裁剪器把反射需要但静态分析看不到的代码裁掉了。解决路径是优先用源生成器替代反射。比如System.Text.Json用JsonSerializerContext源生成。依赖注入容器优先用编译期注册。日志消息用LoggerMessage源生成强类型方法。只有确实无法替代的反射点才考虑用DynamicallyAccessedMembers或UnconditionalSuppressMessage保留。这里要注意SuppressMessage 是“告诉裁剪器别管这里”属于兜底方案滥用会导致裁剪保护失效覆盖范围应尽量小。5.2 动态加载程序集在 AOT 下不可行使用Assembly.Load(byte[])或Assembly.LoadFrom的场景在 AOT 下直接不可用因为运行时根本没有能力在执行期编译并加载新的托管程序集。如果架构上确实需要插件动态加载通常有两条路插件基座留在 JIT 模式插件通过子进程或者单独进程运行。插件在编译期就作为引用加入编译成同一个 AOT 可执行文件用配置文件控制“加载哪些类型”。这两条路的取舍我建议用“插件来源的可信度”来判断如果插件是团队内部控制的固定集合编译期引用完全够如果需要第三方独立编写插件AOT 就不合适。5.3 调试与剖析工具要跟上新运行时Preview 版本的运行时改动多老的调试器插件、符号解析规则、事件流水线格式都可能变化。实际操作中发现排查 JIT 优化类问题建议配合环境变量打开分层编译日志排查 GC 问题可以用 DOTNET_GCRegions 这类环境变量查看区域化分配统计。诊断工具版本和 Runtime 版本不一致时最常见的现象是dotnet-trace里部分事件无法解析先把工具链升到同一发布渠道的最新版。5.4 快速排查清单现象优先排查方向处理建议AOT 后启动报缺少类型反射类型被裁剪用源生成器替代反射或添加 DynamicDependency 保留JIT 模式 CPU 占用异常动态 PGO 是否触发检查 TieredPGO 开关和重编译日志GC 暂停不规律是否开启了区域化 GC / DATAS调整堆区大小策略观察高分配路径AOT 体积超标堆栈符号、文化数据、裁剪粒度关闭 StackTraceSupport流式裁剪本地化资源第三方库不兼容库是否标记 AOT 兼容替换库或调整该模块发布模式6. 最后说点个人实际操作的体会预览版本用得越多越清楚一件事架构演进从来不是“新增了哪个开关”这么简单而是整套运行时在默认行为上慢慢偏向某几类典型负载。这次 Preview 2 给我的感觉是平台在 AOT 和 JIT 之间不再做二选一的站队而是把“什么时候用 AOT、什么时候靠 JIT PGO”的边界划得越来越清楚。对你来说最有价值的动作不是跟风切 AOT而是把你自己的关键服务拆出两类一类是启动敏感、内存敏感、生命周期短的去测 AOT另一类是 CPU 密集、热路径复杂、运行时间长的留在 JIT 观察 PGO 收益。另外提醒一句预览版的环境变量、参数名、默认值都可能在后续版本里变动我上面给的命令和配置是当前版本实测可用的方案。等正式版发布后记得重新跑一遍你熟悉的压测场景把数字记录下来你会发现这种“版本之间留基线”的习惯比争论哪篇博客说的对要有用得多。

相关新闻

涨价周期下的内存升级:32GB为什么成为主流选择

涨价周期下的内存升级:32GB为什么成为主流选择

看到这个标题的时候,我第一反应是:这大概就是今年装机和升级内存最真实的一面。内存价格在这一轮行情里坐着火箭往上走,可周围朋友的配置单却一个比一个“胖”,去年还在纠结16GB够不够用,今年好多人的新机器直接填了32…

2026/10/15 7:02:52 阅读更多 →
上下文模式(Context-Mode)工程实践:传递、隔离与切换

上下文模式(Context-Mode)工程实践:传递、隔离与切换

1. 从“上下文模式”这个命名说起:它到底在解决什么问题第一次看到“context-mode”这个词,很多人会下意识地把它当成某个框架里的配置项,或者某个库的开关参数。但如果你真的在工程一线待过几年,就会发现这个词背后藏着一个非常朴…

2026/10/15 7:02:52 阅读更多 →
PyTorch实战全链路:从动态图原理到多卡部署的深度避坑指南

PyTorch实战全链路:从动态图原理到多卡部署的深度避坑指南

1. 为什么“pytorch”这个标题值得单独拎出来聊如果你在技术社区里闲逛,看到有人只甩出一个词——“pytorch”,然后就没下文了,大概率会以为这是个新手在问“这玩意儿怎么装”。但实际情况恰恰相反,越是只写一个词,越说…

2026/10/15 7:02:52 阅读更多 →

最新新闻

CentOS 7.6搭建DNS正向解析服务:BIND配置实战

CentOS 7.6搭建DNS正向解析服务:BIND配置实战

平时做运维的朋友肯定都有过这种经历:公司内部新起了一套系统,IP地址越来越多,今天要连这个、明天要连那个,总不能天天翻Excel表格。更尴尬的是,内网服务想用一个好记的域名访问,结果发现公共DNS根本不认识…

2026/10/15 7:37:59 阅读更多 →
ConcurrentHashMap 1.7与1.8源码对比:从Segment到CAS+synchronized的并发演进

ConcurrentHashMap 1.7与1.8源码对比:从Segment到CAS+synchronized的并发演进

做Java开发的朋友,多少都被ConcurrentHashMap“教育”过。面试要问,源码分析要讲,线上排查高并发问题也绕不开它。而只要一聊到源码,1.7和1.8这两个版本的区别就是永远躲不开的坎:一个是Segment分段锁,一个…

2026/10/15 7:37:59 阅读更多 →
WinForm文本编辑器源码解析与高级功能扩展实战指南

WinForm文本编辑器源码解析与高级功能扩展实战指南

简介:这份C#文本/代码编辑器专题文档,面向具备一定C#基础、想从零构建或二次开发编辑器的研发人员,解决从界面搭建、文件操作到功能扩展各环节的关键问题。文档先讲解基于WinForm与RichTextBox的基础实现,包括字体加粗/斜体/下划线…

2026/10/15 7:37:59 阅读更多 →
微信小程序投票系统怎么从零搭建?以活动评选为例的完整流程

微信小程序投票系统怎么从零搭建?以活动评选为例的完整流程

从技术视角看,在微信生态里"创建一个投票活动",本质是配置一套活动数据结构 报名审核状态机 防刷策略 数据导出能力。本文以「活动评选」场景为例,梳理从创建到发布的完整流程,并以投票帮小程序作为落地实践案例。 …

2026/10/15 7:37:59 阅读更多 →
T型三电平逆变器VSG自适应控制与并离网切换优化

T型三电平逆变器VSG自适应控制与并离网切换优化

1. 项目背景与核心价值电力电子变换器在新能源发电系统中扮演着关键角色,而T型三电平逆变器因其高效率、低损耗的特性,在中大功率场合得到广泛应用。传统逆变器控制策略在并离网切换过程中常面临暂态冲击大、同步性能差等问题,这正是虚拟同步…

2026/10/15 7:37:59 阅读更多 →
软件的本质是行为:REA式行为克隆全流程拆解与实操复盘

软件的本质是行为:REA式行为克隆全流程拆解与实操复盘

说真的,看到“REA三天狂揽12万星”那条标题的时候,我第一反应是:这又是标题党?一个Agent,不用源码就能克隆一切软件,听起来太像营销号编出来的故事。但等我顺着链接把演示看完,又拿自己手头一个…

2026/10/15 7:36:59 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →