簡體   English   中英

進行文件操作時,C ++程序在Windows和Linux上的運行速度要慢得多?

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

我使用一個名為ChatScript的開源項目進行自然語言處理應用程序開發。

當您使用ChatScript執行構建操作時,它將掃描構成您的聊天機器人的所有腳本文件。 就我而言,這是數百個文件。 Windows 8.1上,此過程花費的時間比在Ubuntu 16.04上花費將近30倍 因此,我的大部分工作中使用Linux,但是由於某些相關工具,我必須在Windows上做一部分工作,因此我想修改代碼庫,以便Windows ChatScript的編譯速度與在Linux上。

誰能想到在WindowsLinux上代碼運行得這么慢的原因嗎? 是否有一些C ++的文件操作代碼(讀/寫/等等)被稱為是在Windows得多Linux相比,由於差異在C ++運行時庫每個平台上運行?

通過在上一段中“代碼運行緩慢”,我從上下文假設您是指編譯器???

多年來,我在磁盤I / O中經常且始終如一地遇到Linux和Windows之間普遍的,顯着的性能差異。 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的創建者Bruce 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或將其關閉,則構建差異​​將基本消失。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM