C++程序在执行文件操作时在Windows与Linux上运行得慢得多?

C++ program runs much slower on Windows vs Linux when doing file operations?

本文关键字:运行 Linux Windows 执行 程序 文件 操作 C++      更新时间:2023-10-16

我使用一个名为ChatScript的开源项目进行自然语言处理应用程序开发。

当您使用 ChatScript 执行生成操作时,它会扫描构成聊天机器人的所有脚本文件。就我而言,这是数百个文件。此过程在Windows 8.1上花费的时间比在 Ubuntu 16.04上花费的时间长近30 倍。 因此,我确实使用Linux进行大部分工作,但是由于某些相关工具,我必须在Windows上完成部分工作,因此我想修改代码库,以便WindowsChatScript编译速度与Linux上一样快。

谁能想到为什么代码在WindowsLinux上运行得这么慢?由于每个平台上运行的C++运行时库中的差异,是否有一些已知C++文件操作代码(读/写/等)在Windows上比Linux得多

通过您上一段中的"代码运行缓慢",我从上下文中假设您指的是编译器???

多年来,我经常和一致地遇到Linux和Windows在磁盘I/O方面的一般,显着的性能差异.NTFS(Windows文件系统)和LINUX文件系统处理大量文件的情况不同,并且在我遇到过的情况下Linux总是更快。

您可能会从回答以下问题中的一些指针中受益:如何让 Windows 像 Linux 一样快地编译C++?,例如对 Windows 驱动器进行碎片整理,以及检查编译器优化的配置方式;其中一些可能会减慢编译器的速度(尽管积极的编译器优化设置可能会减慢编译器的速度, 你最后会生成一个更快的可执行文件,但这可能是你在大部分开发完成后切换到的东西)。

但是为我做所有这些事情从来没有让Windows编译比使用等效磁盘硬件的Linux更快,一次也没有。如果您的代码位于一个磁盘上并且为两个编译提供来源,那么您将在 Windows 构建中看到的任何改进(例如,因为代码放在 SSD 上)也可能在 Linux 构建的改进中复制。

只是为了确认我发现了同样的东西。在普通Mac和快速XPS 15上运行相同的Chatscript脚本。Mac编译代码的速度比Windows快30-50倍。奇怪的是,ChatScript最初是为Windows开发的。我也没有弄清楚为什么会有如此巨大的滞后,尽管Windows PC硬件比运行脚本的Mac强大得多。

所以我遇到了一个解释和一个(部分)解决方案。 与Linux相比,Windows有两个滞后方面:

  • 网络行为。根据ChatScript的创建者布鲁斯的说法 Wilcox,Windows服务器代码在引擎盖下更糟糕,并且 在 Windows 的 ChatScript 与 Linux 的 ChatScript 中实现得更糟。 然而,这里的滞后很小。

  • 构建时间。这就是在 Linux 中构建机器人需要 10-20 个的地方 秒,在 Windows 上 4-5 分钟。原来原因是 防毒:

"出于对巨大差异的好奇,我们的一位硬件工程师
做了一些分析,发现真正的罪魁祸首是防病毒
软件。禁用Windows Defender的
实时病毒防护功能使4分钟缩短到14秒
!即使
保持Windows Defender处于活动状态,但排除
ChatScript-master文件夹也解决了大部分减速问题,
导致:build 0大约需要20秒才能完成
。 (https://www.chatbots.org/ai_zone/viewthread/3575/)

因此,对于OP,如果您从Windows Defender中排除CS,或将其关闭,则构建差异将在很大程度上消失。