次のような非常に単純なコマンドをテストするだけです。
while true; do bash -c "echo hello"; done
Cygwinのbashがどれほど遅いかがわかります。なぜ誰かが知っていますか?
これは、win7でのcygwin 1.7の新規インストールです。
jaredのテストのアイデアのおかげで、コマンドを次のように変更しました(bash -cを追加)。
time for i in {1..10} ; do bash -c "echo Hello" ; done
Hello
...
real 0m7.711s //it's the problem
user 0m0.091s
sys 0m0.476s
最後に、ソースを見つけました-「QQPCMgr RTP Service」という名前のサービスが私のオフィスのコンピューターで実行されています。これは「QQ PC Manager」のリアルタイム保護サービスです。
無効にすると、質問のスクリプトの時間が次のようにフォールバックします。
real 0m0.943s
user 0m0.105s
sys 0m0.231s
私はQQPCMgrの開発者にこれについて話しました、彼らが理由を見つけてくれることを願っています。
これはLinuxよりもはるかに低速ですが、他のcygwinコンピュータと同じ「リアルタイム」になります。
皆さん、ありがとうございました!
ウイルス対策ソフトウェアからCygwinパスを除外するのはどうですか?
パスを確認してください。存在しないパスや非常に遅いネットワーク共有を参照すると、説明している症状が発生する可能性があります。
以下は、私が遭遇した3つの考えられる原因です。もちろん、言及されていない他の問題が原因でCygwinのシェルコマンドが遅くなることもあります。
[LANの設定]に[設定を自動的に検出する]オプションがある場合、Windowsは [〜#〜] wpad [〜#〜] プロトコルを使用してローカルHTTPプロキシを検出します。まず、オプション252でDHCPの「通知」リクエストを送信し、次に「wpad」でDNSルックアップを試みます。これら2つの操作は、タイムアウトするまで数秒かかる場合があります。
シェルが/cygdrive/...
などの一部のパスにアクセスすると、NetBIOS名のクエリが実行されますが、タイムアウトするまでに時間がかかる場合もあります。
シェルが//mypath/...
などの一部のパスにアクセスすると、NetBIOS名のクエリが実行されますが、タイムアウトするまでに時間がかかる場合もあります。
ソリューション:
Windowsの[インターネットオプション]コントロールパネルの[LAN設定]で[設定を自動的に検出する]を無効にします。
%SystemRoot%\system32\drivers\etc\hosts
に次のエントリを追加します。
127.0.0.1 localhost cygdrive wpad
シェルスクリプトからbashを呼び出すのは速くありません。ただ使う方が速いですか
while true; echo hello; done
?
Comodo Internet Security Premium 10では、信頼できるファイルのリストに「C:\ Users \\ Documents\MobaXterm\slash\bin」を追加しました。 (設定->ファイルレーティング->ファイルリスト)。ローカル端末が再び高速になりました。
それに数字を付けましょう。私は以下を実行しました:
time for i in {1..1000} ; do echo "Hello" ; done
標準のCygwin bashウィンドウから得られる結果は次のとおりです。
...
Hello
Hello
real 0m0.584s
user 0m0.031s
sys 0m0.000s
そして、私が手に入れる同じシステムのxterm bashウィンドウから:
...
Hello
Hello
real 0m0.037s
user 0m0.016s
sys 0m0.000s
私はこれがあなたのための質問にかなり答えると思います。問題は、本質的に遅い「Windows」「cmd」のようなウィンドウを通過していることです。 Cygwin自体は問題ではありません。(このテストの場合)動作を遅くしているのは、ディスプレイを維持しようとすることです。
このようにして、この問題が明らかになりました。最初の例では、cygwinプロンプトで20個のコマンドを入力すると高速になり、その後、急激に遅くなります。
パスのすべてのアイテムが有効なディレクトリであることを確認しました。
他の場所で提案されている認証修正を試しました- https://superuser.com/questions/877051/cygwin-from-windows-very-slow-laggy/1247517 。それは私にはうまくいきませんでした。
既存のウイルススキャナー(System Center Endpoint Protection)をソフォスに置き換えました。これで問題が解決しました。お役に立てれば。
この問題は、bash-completionをアンインストールし、KasperskyからWindows Security Essentialsに切り替えることで解決できました。 (「エコーハロー」ベンチマークの実行中に、プロセスエクスプローラーを使用してカスペルスキーの干渉を診断しました。)ベンチマーク時間を7秒から0.2に変更しました。
私はJames McLeodに賛成票を投じました。これは、bashプロセスの開始に時間がかかるためです。ただし、UNIXよりもコマンドの実行が遅くなるわけではありません。
コマンドの最後にbash -c
を追加しない限り、bashスクリプト内から; \
を呼び出すのはほとんど意味がなく、Makefileは多くのbashサブプロセスを呼び出すことができます。
たとえば、Makefileに次のものが含まれているとします。
echo Hello World
echo Good Bye
2つのbashプロセスを呼び出します。高速化し、1つのbashプロセスのみを呼び出すには:
echo Hello World; \
echo Good Bye
Debianは、メインシェルとしてbashではなくダッシュを採用しています。これは、bashを使用して多くのinitスクリプトを開始すると、システムの起動に時間がかかるためです(各スクリプトは独自のbashプロセスを呼び出します)。
Windows Defenderの場合:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender]
"DisableAntiSpyware"=dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender\Real-Time Protection]
"DisableBehaviorMonitoring"=dword:00000001
"DisableOnAccessProtection"=dword:00000001
"DisableScanOnRealtimeEnable"=dword:00000001
以下劇的に:
powershell -Command Add-MpPreference -ExclusionPath "C:\opt\cygwin64"
powershell -Command Add-MpPreference -ExclusionPath "C:\home"
powershell -Command Add-MpPreference -ExclusionProcess "git.exe"
powershell -Command Add-MpPreference -ExclusionExtension ".c"
powershell -Command Add-MpPreference -ExclusionExtension ".cpp"
powershell -Command Add-MpPreference -ExclusionExtension ".cxx"
ソフォスの場合:
REG ADD "HKLM\SYSTEM\CurrentControlSet\Services\Sophos Endpoint Defense\Scanning\Config" /v "OnAccessExcludeFilePaths" /t REG_MULTI_SZ /d "C:\Program Files (x86)\Sophos\Sophos Anti-Virus\\0C:\home\\0D:\Video\\" /f
REG ADD "HKLM\SYSTEM\CurrentControlSet\Services\Sophos Endpoint Defense\Scanning\Config" /v "OnAccessExcludeProcessPaths" /t REG_MULTI_SZ /d "C:\opt\cygwin64\\" /f