2010-08-24 78 views
3

有谁知道为什么hg status第一次从windows客户端的命令行调用时(我假设它在后面被缓存了),它很慢(3-10秒)。hg状态第一次慢

hg status是一个本地操作,它不应该花这么长时间,特别是空回购。

这是在一个有几个变化的活动仓库和一个没有文件的全新仓库的情况。所以回购股的规模似乎并不是表现的一个因素。 谢谢!

+0

是在Windows上?你能否看到你是否有与命令行相同的经验? – tonfa 2010-08-24 16:16:39

+0

是的。运行windows&我正在使用命令行。 – Ash 2010-08-24 16:21:50

+0

也许使用hg --profile会给一些有用的提示。 – tonfa 2010-08-24 16:38:00

回答

7

当您运行hg status命令时,Mercurial必须扫描存储库中的几乎每个目录和文件,以便它可以显示文件状态。 Hg必须对每个托管文件至少执行一次昂贵的系统调用,以确定自上次Mercurial检查以来是否发生了更改,这是不可避免的。

我相信后续调用hg st的原因更快是因为操作系统保留了所有最近访问的文件的缓存信息 - 如果文件没有被修改则禁止磁盘访问。有时候,文件本身甚至可能仍然由操作系统保存在内存映射中,或者完全缓存在硬盘缓冲区中。

编辑:另外,如果您在一段时间内没有调用过hg,操作系统将需要从磁盘读取hg可执行文件及其依赖项,因为它们可能没有被缓存在RAM中。

+0

谢谢!这回答了!然而,这意味着一个空的(或非常小的)回购应该非常快,这在我看到的所有情况下都是不正确的。 – Ash 2010-08-25 13:50:47

+0

是的,因为即使回购是小的(或空的!),操作系统仍然需要加载和缓存汞加上所有的依赖项(例如Python运行时) – 2010-08-25 16:52:04