更快、更轻量的 C# Dev Kit

Microsoft .NET Blog 发布日期待确认

我们开发者都知道电脑能有多快,也希望在工具里感受到这种速度。等待语言支持加载、构建完成、测试跑完,这些时间本可以用在别的地方。作为 .NET 11 的一部分,C# Dev Kit 彻底重构了架构,性能和内存占用都大幅改善,还带来了一些不错的新功能。这是介绍 C# Dev Kit 11.0 改进的系列博客第一篇。本文从整体上介绍这些改进,后续文章会为感兴趣的读者深入细节。我们把 C# Dev Kit 的版本号与 .NET 当前版本对齐了:新扩展版本是 11.0,之前是 3.3。下面看看有哪些新东西。

加载更快

我们在两个真实解决方案上测了加载时间:Orleans(155 个项目)和 Aspire(407 个项目)。

解决方案 项目数 就绪内容 C# Dev Kit 3.3 C# Dev Kit 11.0 提速
dotnet/orleans 155 活动文件 最长 50.3 秒 0.53 秒 最高 95×
整个解决方案 50.3 秒 2.3 秒 22×
dotnet/aspire 407 活动文件 最长 84.1 秒 0.47 秒 最高 180×
整个解决方案 84.1 秒 3.0 秒 28×

表里展示了加载过程中的两个时间点。活动文件就绪是指你正在编辑的文件已经能用上语言支持,包括补全、诊断、转到定义和快速修复。到这一步,你就能开始真正干活了。整个解决方案就绪是指所有项目都加载完毕,任何文件都能用语言支持,解决方案里的测试都被发现,查找所有引用也能跨所有项目工作。

C# Dev Kit 新增的项目缓存让加载更快。它不再每次打开都重新重建对每个项目的理解,因此语言服务、测试和启动目标几乎立刻可用。现在它优先加载活动文件,你可以在当前文件里开始工作,工作区其余部分在后台加载;而且性能稳定,与项目数量无关。旧实现按固定顺序加载项目,加载时间取决于文件在这个顺序里的位置。项目缓存会在该项目第一次加载时建立。

之后的每次加载都直接读缓存,速度很快。如果把缓存文件提交到版本控制系统,那么新克隆的仓库和新建的 git worktree 就能立刻获得快速的工具支持,这在配合智能体(agent)工作时特别有用。

我们还把多个进程合并成一个,进一步缩短了加载时间。旧版本会启动六个托管进程,每个进程都要通过杀毒软件检查、从磁盘加载映像、进行 JIT 编译(通过 ReadyToRun 尽量减少),然后互相连接。这一切都得先完成,才能回答哪怕一个关于代码的问题。合并后的 CSDevKit 进程是一个原生可执行文件,用 .NET 的 Native AOT 提前编译。它能立即开始运行,无需加载运行时,启动路径上也没有即时编译。

缓存数据、更少的进程,加上 Native AOT,带来了更灵敏的开发体验。本系列的后续文章会更详细地探讨这些话题。

更快的构建

得益于快速最新检查(fast up-to-date checks)和构建加速(Build Acceleration),C# Dev Kit 11.0 的增量构建快了很多。这两个功能 Visual Studio 开发者已经用了一段时间。我们仍用那个包含 407 个项目的 Aspire 解决方案,每次都构建整个解决方案。

构建改动 C# Dev Kit 3.3 C# Dev Kit 11.0 快了多少
无 34.4 s 0.88 s 39×
单个 C# 文件 36.1 s 2.1 s 17×

在 11.0 中,我们减少了判断哪些内容发生变化、以及复制输出文件的开销。构建时间取决于解决方案的结构,所以并非每次构建都能获得这么大的提升。不过,每次只构建少量改动是常见做法,而这正是 11.0 提升最明显的场景。

运行单元测试和启动应用时,灵敏度的提升能明显感觉到。这两种操作在开始前都会先构建,所以在 11.0 中它们能更快完成。

内存

旧架构把 C# Dev Kit 的内部服务分散在六个相互连接的进程中。这个版本把这些进程合并成一个服务器,用 Native AOT 编译。

解决方案 项目数 C# 文件数 C# Dev Kit 3.3 C# Dev Kit 11.0 降幅
dotnet/orleans 155 4,010 1,307 MB 208 MB ~84%
dotnet/roslyn 398 18,153 2,000 MB 379 MB ~81%
dotnet/aspire 407 4,686 2,072 MB 316 MB ~85%

内存占用更多取决于代码库的规模,而不是项目数量。Roslyn 的 C# 代码量约为 Aspire 的四倍,所以项目数虽少,它的服务进程反而更吃内存;而紧凑的项目模型让内存增长远慢于代码本身的增长。

上面的数字只统计 C# Dev Kit 服务进程占用的内存。C# 语言服务(Roslyn)和以前一样跑在独立进程里,Visual Studio Code 自身也有内存开销,二者都不在这次对比范围内,本次发布中它们也基本没变。

11.0 版本在内存中用更紧凑的方式表示项目,大幅降低了内存占用,大型解决方案尤其明显。原生 AOT(Native AOT,把 .NET 程序提前编译成机器码)也让运行时内存更省。

编辑项目和其他 MSBuild 文件

C# Dev Kit 11.0 为 .csproj、.props 和 .targets 文件带来了全新的编辑体验:代码补全、诊断、转到定义、快速修复、语义高亮,跟编辑 C# 代码时得到的语言支持一样。

现在包名和版本号也能补全了:

https://devblogs.microsoft.com/dotnet/wp-content/uploads/sites/10/2026/10/package-completion.mp4

包还会显示一条 CodeLens,提供几个顺手的操作:有新版本可用时会标出来,正在使用的版本存在漏洞时也会提示。

MSBuild 的语言支持不只覆盖包。补全还能用于属性、项(item)和元数据键;转到定义对多种语言元素都有效,甚至能带你跳进 SDK 源码;诊断会在你输入时标记问题,快速修复则给出改法。

用 C# Doctor 做健康检查

C# Dev Kit 的另一项新功能是 C# Doctor。项目加载失败,或者行为不符合预期,原因往往出在环境上:缺少所需的 SDK、没有安装运行时、目标框架不可用、包还原失败,或者引用的包存在已知漏洞。

C# Doctor 把这些检查集中到一起,引导你找到合适的解决方案,而不是让你自己从一条条错误信息里拼凑原因。它简化了让项目配合 C# Dev Kit 所需的工具和配置流程。

接下来

IDE 的角色正在改变。开发者采用新的工作流后,我们会不断发现工具的不足之处。用代理开发时,我们需要更快地进出工具,还需要并行运行多个实例。

C# Dev Kit 11.0 的架构调整,让这个扩展为未来几年做好了准备。这些改进针对的是工具的基础层面,无论对开发者本人,还是对他们等待的代理,都有帮助。我们正在这些组件上做长期投入,希望把它们带到更多环境,让整个生态更一致、性能更好。这方面的更新,敬请关注。

本系列的后续文章会深入介绍:更简洁的架构、Native AOT 服务器、项目加载缓存,以及更快的构建。

试用

C# Dev Kit 11.0 已发布预发布版,想最快看到差异,更新后打开自己的一个解决方案就知道了。希望你会觉得它更快、更好用。

获取 C# Dev Kit

安装后,在扩展视图的 C# Dev Kit 页面选择“切换到预发布版本”,即可加入预发布通道,体验这些改进。我们正努力让它能在稳定通道发布,你的反馈会帮助我们把这件事做好。你可以在 GitHub 上提交 bug 和建议。

查看原文