3

我正在尝试帮助SuperCollider 社区尝试并了解我们如何防止 Windows Defender 在最新的 Windows 10 上延迟执行其中一个可执行文件。

原始github 问题可以在 github 上找到

这是测试用例:

  1. 下载适用于 Windows x64 (3.10.3)的最新版 SuperCollider

  2. 安装它

  3. 重新启动计算机

  4. 打开“cmd”并开始scsynth.exe

cd "\Program Files\SuperCollider-3.10.3"
scsynth.exe -u 57110

您将不得不等待 50 到 60 秒才能看到 scsynth 输出,它应该以类似的开头

Device options:
  - MME : Mappeur de sons Microsoft - Input   (device #0 with 2 ins 0 outs)
[...]
SuperCollider 3 server ready.
  1. 请注意,如果您退出scsynth.exe并再次运行该命令,则会scsynth.exe立即启动,不会有任何延迟

  2. 现在将scsynth.exe 进程放入 Windows Defender 排除列表(有关如何访问此排除列表的信息,请参阅本文)

  3. 重启

  4. 打开“cmd”并开始scsynth.exe

cd "\Program Files\SuperCollider-3.10.3"
scsynth.exe -u 57110

现在scsynth.exe马上开始。

此行为在添加 Windows Defender一见钟情功能时开始。

它给 SuperCollider Windows 用户带来了很多问题。

任何人都可以帮助我们解决这个问题吗?

4

1 回答 1

1

我想您在这里期待 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 演讲,比如这个

于 2021-12-16T21:52:48.443 回答