Cal*_*ius 27 c++ performance mingw codeblocks
我在Windows上使用Code :: Blocks IDE和GCC/MinGW,我正在尝试构建一个wxWidgets应用程序,其中包含ca. 20k线和40个源模块.它构建非常慢.
编译C++模块持续2-5秒,链接持续2-3分钟.
它是一个可移植的代码,这段代码在Linux上编译速度非常快.我无法按照构建消息窗口...整个过程持续不到20秒.
我尝试了常见的调整(例如,预编译头,关闭优化等),但没有任何效果.
为什么这么慢?
mda*_*iel 17
您是否在Active Directory域中,但没有立即连接到它?
虽然我没有关于为什么MinGW会变慢的"答案",但我的经验是属于AD域但无法到达AD控制器的计算机在启动可执行文件时有延迟(例如rxvt.exe)和当前正在运行的那些经历暂停或口吃(例如emacs,它是使用MinGW构建的).
我仍在调查以确定这种行为的实际原因,但我想如果它适用于你,我会提到它.
hyd*_*yde 10
MinGW上的许多"unixy"东西都很慢,因为Windows没有fork().Windows只有CreateProcess(),这是完全不同的.Unix shell和GNU Make做了很多分叉,所以在MinGW下运行这些会产生"模拟"的分支,这非常慢.
另一个受此影响的是GNU Autotools,因此./configure在从源代码构建"unixy"应用程序时运行脚本也非常慢.如果您需要多次执行此操作(例如,遇到配置以查找所有库时遇到麻烦),这会非常烦人.
这个答案详细介绍了Cygwin和MinGW的如何使用模拟fork(),并且这个答案有更多的最新解释.
由于MSYS 1.0.19-1,如果用户帐户是在Active Directory域和域控制器(DC)不可达,则MSYS DLL将介绍启动任何可执行MSYS(使用前具有长的延迟MSYS DLL).这会影响MSYS make和Coreutils的包中的所有的命令行实用程序,如ls,rm等,其通常安装在C:\MinGW\msys\1.0\bin.
观察:
从MSYS bashshell 启动实用程序时,只有shell的启动被延迟命中.从shell启动的实用程序不会产生影响.
延迟可能会有所不同,在我的情况下是21秒.
cmd并键入echo %LOGONSERVER%,然后ping或net view使用DC的主机名.为什么这么慢:
MSYS DLLin 的代码uinfo.cc internal_getlogin()进行两次系统调用以获取用户信息.它第一次调用NetUserGetInfo()从本地计算机中检索用户帐户.它对域用户来说是失败的,所以它第二次调用DC服务器来自LOGONSERVER变量.如果无法立即访问此主机,则会导致长时间延迟,直到超时时呼叫失败.申请将在不久后开始.如何避免这个问题,几个解决方法:
LOGONSERVER使用正确的DC主机自动更新.cmd或脚本调用MSYS工具,则设置 LOGONSERVER为localhost以避免网络访问.比如set LOGONSERVER=\\LOCALHOST为我工作.注意:此变量在登录时设置,并且在Windows环境变量窗口中全局更改此变量与在其中设置cmd或脚本相比无效.| 归档时间: |
|
| 查看次数: |
21209 次 |
| 最近记录: |