Подтвердить что ты не робот

TortoiseHg медленный

В основном, что он говорит о жестяном: TortoiseHg работает медленно.

Недавно моя команда переехала из Subversion в Mercurial. (Частично использовать Kiln для обзоров кодов). Одна из вещей, которые мы заметили, заключается в том, что взаимодействие с Mercurial через TortoiseHg очень медленное. Некоторая статистика:

  • Open TortoiseHg Workbench: 8 минут 13 секунд
  • Время отклика при нажатии на ревизию: 2,8 секунды
  • Время "Обновить текущий репозиторий": 6.4 секунды
  • Время проверки входящих изменений: 12.8 секунд

Все это действительно добавляет к очень медленному ощущению. Для справки, вот время инструмента командной строки:

  • hg status: 4.573 секунды
  • hg incoming: 12.150 секунд

Время командной строки, похоже, сокращается со временем рабочего места, но рабочий стол делает задержку гораздо более расстраивающей, поскольку она синхронна с использованием программы. Например, типичная задача - "получить последние вещи, которые мой коллега просто нажал". Это выглядит так (только перечисление времени, проведенного на компьютере, округленное):

  • Открыть TortoiseHg: 10 минут.
  • Откройте соответствующий репозиторий, дважды щелкнув его в репозитории реестра: 5 секунд.
  • Зафиксировать локальные изменения, которые необходимо выполнить:
    • Нажмите "Рабочий каталог": 5 секунд.
    • Выберите важные файлы и введите сообщение фиксации.
    • Нажмите "Зафиксировать": 20 секунд.
  • Получить изменения коллектива:
    • Проверьте наличие входящих наборов изменений: 10 секунд.
    • Просмотрите их.
    • Принять входящие изменения: 40 секунд.
  • Стеллажи уже не изменились:
    • Открыть диалоговое окно Shelve: 2 секунды.
    • Остальные файлы Shelve: 6 минут
    • Обновить: 5 секунд.
  • Merge:
    • Нажмите другую голову: 3 секунды.
    • Объединить с локальным:
    • Подождите, пока проверка "Clean": 15 секунд.
    • Ожидание слияния (при отсутствии конфликтов): 10 секунд.
    • Зафиксировать: 30 секунд.
  • Отменить изменения:
    • Открыть диалоговое окно Shelve: 2 секунды.
    • Unshelve: 6 минут.
    • Обновить: 5 секунд.

Всего: 24 минуты, 32 секунды.

Двенадцать из этих минут потрачены на стеллажи и демонтаж. Десять - только открытие. Одним из следствий этого является то, что люди склонны совершать вещи, которые они не уверены, будут куда угодно, чтобы избежать расходов на стеллажи. Но даже если вы не принимаете никаких стеллажей и не открываете стоимость (возможно, вы просто оставите ее открытой), все равно требуется 2 с половиной минуты тщательного нажатия, чтобы получить последние материалы.

И это даже не учитывает более значимые вещи, такие как клонирование и многое другое. Все это медленно.

У меня есть:

  • Отключенный антивирус.
  • Отключено индексирование.
  • Rebooted.
  • Пробовал это на 3 разных версиях окон.
  • Пробовал на разных аппаратных средствах, большинство из них разумное качество: Core 2 Duo @3,16 ГГц, 8 Гб RAM.
  • Пробовал его на 32 и 64-разрядных ОС.
  • Попробовал отключить его от сети.

Репозиторий фактически представляет собой два репозитория: первичное репо и субрепо, в котором содержатся все наши сторонние двоичные файлы. Папка .hg основного репо - 676 ​​МБ. Папка .hg для суб-репо составляет 641 МБ. Содержимое default в первичной репо составляет 7.05 ГБ. Содержимое default в суб-репо составляет 642 МБ. Средний размер файла в основном репо составляет 563 КБ. Максимальный размер файла в основном репо составляет 170 МБ. В основном репо есть 13 438 файлов. Средний размер файла в субрепо составляет 23 КБ. Максимальный размер файла в суб-репо составляет 132 МБ. В суб-репо есть 57087 файлов.

У меня есть варианты с большим нажатием, футляром, выборкой, гештальтом, kbfiles, обжигом, кильватой, кильватом, мк, чисткой и расширением трансплантата.

Любые идеи, где начинать выяснять, как ускорить работу? Медленность сводит нас с ума.

4b9b3361

Ответ 1

Хорошо, отвечая на мой собственный вопрос, потому что я нашел ответ, следуя совету Тима.

Претендент kbfiles из FogCreek. Отключение этого сброса стат с 12 секунд до 0,7 секунды. Аналогично, графический интерфейс открывается быстрее, чем я могу. При повторном включении все снова резко замедляется.

Не похоже, что каждую медленную вещь можно обвинять в kbfiles, но самое худшее из этого может быть. (В частности, полка все еще довольно медленная - процессор связан. Однако мы можем обойти это.)

Ответ 2

Это тонна файлов... и некоторые из них ужасно большие. Как он работает без больших файлов? Двоичные файлы не совсем то, что нужно отслеживать с помощью hg/ git, по моему скромному мнению.

Как насчет разрыва большого репо на более мелкие. Действительно ли им нужно быть в 2 ОГРОМНЫХ РЕПО?

Возможно, дефрагментация жестких дисков может немного улучшить некоторые из этих времен. Также посмотрите расширения, которые были созданы, чтобы помочь справиться с большими бинарными файлами. См. Здесь:

https://www.mercurial-scm.org/wiki/HandlingLargeFiles

Ответ 3

В некоторых случаях советы , приведенные в документации, могут быть полезны для повышения скорости THG:

5.4.8. Performance Implications

Есть некоторые функции Workbench, которые могут влиять на производительность в больших репозиториях.

View ‣ Choose Log columns…

  • Включение столбца Changes может быть дорогостоящим для расчета в репозиториях с большими рабочими копиями, что приводит к замедлению как обновлений, так и прокрутки.

Вид ‣ Загрузить все

  • Обычно, когда пользователь прокручивает историю, куски наборов изменений читаются при прокрутке. этот выбор меню позволяет Workbench считывать все наборы изменений из репозитория, возможно, обеспечивая более плавное перемещение по истории.

По моему опыту, это определенно стоит делать! Вы должны хотя бы попробовать их и посмотреть, есть ли заметный эффект.


Кроме того, если вы прочитали почему ртутная ртутная пересылка так медленная?, есть настройка, которая может значительно ускорить rebase:

По умолчанию rebase пишет в рабочую копию, но вы можете настроить запускать в памяти для лучшей производительности и разрешать запуск, если рабочая копия грязная. Просто добавьте следующие строки в ваш .hgrc Файл:

[rebase]

experimental.inmemory = True