我在 Windows 10 64 位上将午夜指挥官与 Cygwin 64 位一起使用。
在转移到新机器并重新全新安装 Windows 和 cygwin 后,我的午夜指挥官开始时不时地变得非常滞后。重新启动会有所帮助,但这种情况发生得太频繁,因此不是一个可行的解决方案 (重新启动没有帮助)。
我不知道这些故障的原因是什么。MC 通常工作正常:箭头键工作正常,查看和编辑是即时的,但有一件事需要长达 10 秒钟 - 更改目录。在文件中搜索也有类似的延迟,但只有一次(即不是每次chdir
都可以)。在非 mc cygwin 使用中不会发生此问题。
任务管理器未显示任何进程的 CPU 或内存使用率异常高。我已经cygserver
运行,使用bash
作为我的 shell,并且没有花哨的PS1
设置,我$CYGWIN
的只有winsymlinks:native
。
这是一个strace
日志,也许有人知道哪里出了问题?
http://pastebin.pl/view/9b839815
(录制于LOCALE=C strace -q -o /tmp/mc-log mc /tmp
)
在录音中我有:
/tmp
在目录中启动 mc- 进入
/tmp/NVIDIA Corporation
目录 - 又回到了(
..
) - 进入
/tmp/mc-chanibal
目录 - 又回到了(
..
) - 按 F10 退出
其他时间信息:
查找我的所有目录$HOME
需要 4.6 秒:
$ time find ~ -type d | wc -l
(snipped two directories without permissions)
19919
real 0m4.626s
user 0m0.796s
sys 0m3.765s
所有ls -al
这些目录都花费了大量时间,但平均值相当低:
time (find ~ -type d | while read f; do { time ls -al $f; } \
|& awk '$1 == "real" { printf $2 }' \
| awk -Fm '{printf( "%2.4f", $1 * 60 + $2 )}'; \
echo -e "\t$f"; done \
) >/tmp/ls-time-log ;
(snipped two dirs without permissions)
real 12m21.870s
user 7m4.576s
sys 16m34.446s
执行一项操作的平均时间ls -al
为 0.020 秒,最小值为 0.017,最大值为 0.154:
$ awk 'BEGIN { sum=0; min=9999; max=0; minf=""; maxf=""; } \
$1 { sum += $1; \
if(min > $1) { min = $1; minf = $2; }; \
if(max < $1) { max = $1; maxf = $2; } } \
END { print "avg: " sum/NR; print "min: " min " " \
minf; print "max: " max " " maxf }' </tmp/ls-time-log
avg: 0.0204292
min: 0.0170 /cygdrive/c/Users/chanibal/AppData/Roaming/OculusClient/Local
max: 0.1540 /cygdrive/c/Users/chanibal/AppData/Local/Android/sdk/platforms/android-23/data/res/drawable-hdpi
加上测量时间的开销,平均每次调用 需要 16m34s/19919 = 0.499s ,每次迭代需要ls -al
2 s 。不是很好,但也不是四秒。awk
find
标准化cygpath
不需要很长时间:
$ time strace cygpath -aw /tmp/NVIDIA\ Corporation/ | grep normalize_posix_path
116 11175 [main] cygpath 3524 normalize_posix_path: src /tmp/NVIDIA Corporation/
20 11195 [main] cygpath 3524 normalize_posix_path: /tmp/NVIDIA Corporation/ = normalize_posix_path (/tmp/NVIDIA Corporation/)
real 0m0.034s
user 0m0.015s
sys 0m0.000s
编辑:将此问题添加到MC 轨迹
答案1
我发现了这个问题,并确定是 Windows 10 或硬件故障,而不是 MC。Midnight commander 确实会触发此问题,但它是通过以预期的方式使用操作系统来实现的,所以这不是它的错。
确切地说,问题是枚举设备需要时间(在 Windows powershell 中正好是 4 或 5 秒,在 Cygwin 中正好是 4 秒)。我的情况的解决办法是禁用需要时间的 DVD 驱动器。详情请见Cygwin 邮件列表主题。