我想您在这里期待 Microsoft 的真正答案,但这可能会在评论中丢失,并且对于 SC 用户注册作为答案可能足够有用的信息,所以:
经过更多的实践经验后,当您从非系统位置运行 SC (即不安装到 Program Files,也可能不安装到系统驱动程序)时会发生什么情况会稍微复杂一些。对于非系统位置,您仍然可以通过 Defender 以慢速启动速度对其进行扫描,但每次机器启动仅一次。然而,如果 SC 安装到 Program Files,它会在每次 SClang 进程启动时被扫描(但不会在同一个 sclang 进程运行时重新编译类库),除非手动添加 Defender 异常路径。
据我所知,以上内容仍然启用了“一见钟情”,因为 MS 说“要禁用一见钟情,请关闭云提供的保护或自动样本提交。” 而且我仍然启用了这两个功能。
因此,如果您不重新启动您的 PC,而只是使用挂起/恢复,那么如果您将 SC 安装到非系统位置...用于常规用途,这并不是什么大问题。毫无疑问,它仍然为新的 SC 用户提供了糟糕的开箱即用体验。
实际上,微软今天证明了上述理论有点错误。我刚刚进行了一次 Windows 更新,使我的机器重新启动,所以我完全预计下一次 SC 启动会再次变慢……但事实并非如此!
因此,Defender 似乎保留了最近使用和扫描位置的持久缓存,这意味着它保存在磁盘上。所以下一个问题是什么实际上可能使这个缓存失效。最后一次重新启动,没有导致长时间扫描,仅用于 Windows 每月更新,但它不包括 Defender 引擎或定义更新。所以我认为 Defender 缓存可能会在一些更具体的事件上失效,而不是任何重启。也许有一些直接的基于时间或 LRU 的条目到期,但很难测试这一点,因为 Defender 更新自身经常会产生混淆。
是的,在对后一个问题进行快速搜索后,Defender确实在磁盘上保留了与其先前扫描有关的一些信息的持久缓存。
打开实时保护后,大约 20-30 分钟后,它会在以下位置创建数百/数千个文件:C:\ProgramData\Microsoft\Windows Defender\Scans\History\Store
大多数这些文件是 1kb 或 2kb。在 24 小时内,我们最终得到了大约 950,000 个文件,并且占用了 30 GB 的空间。
顺便说一句,那些 Defender 历史文件太多的问题在当时(2021 年 5 月)得到了修复
此问题目前是一个已知问题,该修复程序将在本周四发布所有版本。RCA 是 MsMpEng.dll 的工程师有一些问题并导致此文件夹中的大量文件。受影响的引擎版本是 18100.5。
但可以肯定的是,一些扫描历史信息仍保留在磁盘上,这确实在正常使用时在很大程度上缓解了重新扫描 SC 等程序的问题,尽管在开箱即用的情况下不是这样。 SC刚刚安装。
另外:有点搞笑,但似乎Defender 扫描速度放缓有时会影响微软自己的产品。
在编程解决方案领域:
据我所知,只要 Windows Defender(可能还有其他 A/V 扫描仪)正在运行,就没有办法让 Windows I/O API 始终保持快速。您可以禁用 A/V 扫描(后果自负)。但是Mercurial 使用的技巧(后来被 rustup 和其他工具模仿)是使用线程池来调用 CloseHandle(). 即使您在单个线程上执行所有文件打开和写入 I/O,并且仅使用后台线程池来调用 CloseHandle(),您也可以看到写入文件的时间提高了 3 倍以上。理想情况下,任何在 Windows 上创建或改变几百个文件的软件都应该采用这种优化。这包括版本控制工具、安装程序和存档提取工具。有趣的事实:rustup 可以比开源和商业快速提取/复制工具更快地在 Windows 上提取 tar 文件,因为它使用了这个技巧等等。我相信 Windows 上的 rustup 实际上在提取 tar 档案方面比在 Linux 上更快!
也有来自rustup
开发者的 youtube 演讲,比如这个。