JetBrains 披露,Windows 用户报告的 Rider 和 ReSharper 启动缓慢问题,并非完全由这两款工具的架构导致,而是在很大程度上与 Microsoft Defender 在它们启动时执行的扫描操作有关。根据该公司的结果,当 ReSharper 作为 Visual Studio 外部的独立进程运行时,Defender 会为首次启动增加数十秒;相比之下,其他工具的扫描通常在不到一秒内完成。
这一结果出现在 ReSharper 采用进程外运行(Out-of-Process 或 OOP)架构之后。JetBrains 开发这一架构,是为了减轻 ReSharper 对 Visual Studio 响应性的影响。该公司于前一年向公众推出了 OOP 模式,并在 ReSharper 2026.2.1 中将其设为默认启用。虽然内部测量显示整体性能有所提升,但用户报告开始指出启动速度变慢,这促使 JetBrains 开展更详细的分析。
延迟出现在哪里?
JetBrains 重点分析了通过 ETW(Event Tracing for Windows,Windows 事件跟踪)获取的 Microsoft Defender 跟踪日志,以及直接的处理器时间测量。该公司使用了 Microsoft-Antimalware-Engine 提供程序的事件,尤其是记录每次扫描开始和结束的 StreamScanRequestTask 事件。
数据显示,位于受写保护路径中的文件会获得信任规则,使 Defender 在启动期间以更轻量的方式处理它们。但当 ReSharper 开始作为独立进程运行时,它会接受完整扫描,其中包括从用户安装目录加载的 DLL 库。因此,在某些情况下,扫描时间从大约几秒增加到了数十秒。
JetBrains 分析了数十款开发工具,发现它们之间存在显著差异。JetBrains 的集成开发环境以及其他编辑器类工具的冷扫描时间大约在 10 至 40 秒之间,而在同一测试中,Microsoft 的集成开发环境和其他编辑工具的扫描时间仍低于一秒。依赖命令行的工具大约耗时不到两秒,公司认为这主要是因为其可执行文件较小且 DLL 库数量有限。
测试与 Microsoft 的合作
测量在一台 Dell Pro Max 16 (MA16250) 电脑上进行,该设备配备 16 核 Intel Core Ultra 9 285H 处理器、64 GB DDR5 内存,并运行 Windows 11 Pro。工具在 Hyper-V 虚拟机中运行,虚拟机配置为 8 个 vCPU 和固定的 8 GB 内存。JetBrains 对每款工具测量十次,并在每次尝试前重启虚拟机,以模拟冷启动并减少文件缓存和内存缓存的影响。
起初,即使查阅了现有文档,JetBrains 也无法解释所有扫描规则,因此联系了 Microsoft 团队。双方的合作帮助确定了促使 Defender 执行更多工作的因素,也帮助解释了为什么 Rider 承受的扫描强度高于 IntelliJ IDEA 和 ReSharper 的总和。
Microsoft 在 1.449.454.0 版本中发布了 Defender 更新,用于处理 Rider 和 ReSharper OOP 安装在受写保护文件夹中的特殊情况。但 JetBrains Toolbox 默认安装在 %LOCALAPPDATA%\Programs 路径下,该路径允许在无需提升权限的情况下写入,因此无法受益于与受保护文件夹相关的优化。JetBrains 表示,仍在评估处理通过 Toolbox 安装 Rider 以及 Microsoft Defender 排除项的最佳方式。
用于测量 Defender 影响的工具
JetBrains 推出了 Defender Performance Tool,帮助开发者和发布者开展同样的调查。该工具可以在应用启动、加载插件或执行编译操作期间实时监控扫描活动,也允许使用 New-MpPerformanceRecording 打开预先录制的快照并在之后进行分析,还可以在处理多个快照时导出 CSV 数据。
JetBrains 指出,在受管理环境中,系统管理员可能会禁止向 Microsoft Defender 添加本地排除项。因此,该步骤并非始终可用,也不应被自动视为查明速度变慢原因或遵循企业安全策略的替代方案。
这对开发者在实际中意味着什么?
这一案例表明,开发环境的性能测量并不局限于应用执行时间或工具本身的内存消耗。延迟可能出现在与程序并行运行的安全层中,其影响会因安装方式、文件位置以及启动时加载的库数量而有所不同。
JetBrains 建议保持 Microsoft Defender 定义更新,使用用于 Defender 性能调查的 PowerShell 模块,并在发现无法解释的速度变慢时尝试新的测量工具。该公司还提到,应将程序安装在受写保护的文件夹中,并在需要时使用 Add-MpPreference 命令配置排除项,同时创建 Dev Drive 来存放代码仓库和软件包缓存。
编辑解读:最重要的变化并不只是 Rider 或 ReSharper 的内部改进,而是揭示了开发工具设计与安全扫描机制之间一种并不明显的交互。不过,相关结果仍与特定测试环境、虚拟机以及有限次数的测量有关;因此,不能证明所有 Windows 用户都会遇到相同的差异。本文的实际价值在于提供了一套方法和工具,让用户在修改安全设置前验证问题原因;与此同时,JetBrains Toolbox 安装支持以及系统管理员施加的限制仍有待解决。