解决方案
您遇到的问题不是Cygwin中的任意限制,您可以使设置更改。这是Cygwin必须努力制定POSIX语义程序的固有方面。
POSIX fork()
系统呼叫在窗户上没有本机等效,因此Cygwin被迫模仿它 一种非常低效的方式. 。外壳脚本导致通话 fork()
每次执行外部过程时,都会发生很多事情,因为相对于我们通常称为编程语言的shell脚本语言是如此贫穷。外部程序是Shell脚本完成任何后果的方式。
Cygwin中还有其他效率低下,尽管如果您对其进行了介绍,那么您可能会发现这是第一速受到打击。在大多数地方,使用它构建的程序和基础操作系统之间的cygwin层非常薄。 Cygwin的开发人员需要大量痛苦来使层保持尽可能薄,同时仍提供正确的POSIX语义。当前不常见的厚度 fork()
Call Motulation不可避免地添加了Microsoft fork()
将设施键入其操作系统。他们这样做的激励措施不是很好。
上面发布的解决方案为评论还不错。
另一种可能性是通过 drush
脚本,看看是否有针对外部程序的调用,您可以用Shell Interinsics或更有效的构造替换。我不会期望通过这样做会提高速度,但是它具有不错的属性,您也可以在Linux方面加快速度。 ((fork()
在Linux上是有效的,但是启动外部程序仍然是您可能不必像目前那样经常付款的速度。)例如:
numlines=`grep somepattern $somefile | wc -l`
if [ $numlines -gt 0 ] ; then ...
会更快地运行:
if grep -q somepattern $somefile ; then ...
第一个版本可以说是更清晰的,但是它需要至少三个外部程序调用,并且具有原始外壳, 四个. 。 (您看到所有这些吗?)替换只需要一个外部程序调用。
其他提示
还要查看速度降低Cygwin创业公司的事情:
- 修剪您的Windows路径(到裸露的骨头,例如%SystemRoot% System32;%SystemRoot%)
- 从BashRC和BASH_PROFILE中删除您不需要的东西
- 将仅在终端窗口中需要的东西从bashrc移动到bash_profile
- 狂欢完成的一场令人惊讶的时间是塞格温(Cygwin)。如果您正在使用它(并且应该因为它很棒),则仅对所需的命令完成源完成(而不是所有这些命令的命令)。而且,如上所述,他们从
bash_profile
, , 不是bashrc
.
您可以将Cygwin提高优先级。
写一个新的批处理文件,例如,“ cygstart.bat”,其中包含以下内容:
start "Cygwin" /high C:\cygwin\Cygwin.bat
这 /high
开关为外壳提供了更高的过程优先级。