2010-08-24 79 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