在进行文件操作时,C ++程序在Windows与Linux上的运行速度要慢得多吗?

时间:2018-01-20 12:32:45

标签: c++ linux windows performance chatscript

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

使用ChatScript执行 build 操作时,它会扫描构成chat-bot的所有脚本文件。就我而言,这是数百个文件。与 Ubuntu 16.04 相比, Windows 8.1 上的此过程几乎 30次。因此,我在我的大部分工作中都使用Linux,但由于某些相关工具,我必须在 Windows 上完成我的工作的一部分,所以我想修改代码库,以便 Windows ChatScript编译速度与Linux上一样快。

有没有人能想到代码在 Windows Linux 上运行得如此之慢的原因?是否存在一些C ++文件操作代码(读/写/等),与 Linux 相比, Linux 上的 更慢在每个平台上运行的C ++运行时库中的差异?

3 个答案:

答案 0 :(得分:3)

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

多年来,我一直经常遇到磁盘I / O中Linux和Windows之间普遍存在的显着性能差异。 NTFS(Windows文件系统)和linux文件系统以不同的方式处理大量文件的情况,在我遇到的情况下,linux总是更快。

您可以从How do I get Windows to go as fast as Linux for compiling C++?等问题的答案中获得一些好处,例如对Windows驱动器进行碎片整理,以及检查编译器优化的配置方式;其中一些可能会降低编译器的速度(尽管积极的编译器优化设置可能会降低编译器的速度,但最终会生成更快的可执行文件,但这可能是您在完成大部分开发后切换到的内容)。

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

  • 网络行为。根据ChatScript的创建者布鲁斯的说法 Wilcox,Windows服务器代码在后台更差,而且 与Windows的ChatScript相比,Windows的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或将其关闭,则构建差异​​将基本消失。