вторник, 19 августа 2008 г.

Скорость запуска Nomad

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

Nomad.NET построен на "новой" технологии от Microsoft под названием .NET, и как любая технология у неё есть преимущества и недостатки. Преимущества я сейчас затрагивать не буду, а вот одним из недостатков является медленный холодный старт.
Разделяют два вида запусков .net приложений, холодный и горячий старты. Грубо говоря холодный старт происходит если вы запускаете .net приложение сразу после загрузки машины, когда ещё ни одна часть фрэймворка не загружена в память. Ну а горячий соответсвенно это когда некоторые части фрэймворка уже прокэшированы, обычно если запустить программу, затем закрыть, а затем через некоторое время снова запустить это и будет горячий старт.
Так вот возвращаясь к медленному холодному старту, дело в том что при первом запуске приложения происходит его компиляция из системонезависимых кодов в системозависимые, такая компиляция происходит по мере необходимости но тем не менее отрицательно сказывается на времени загрузки.

Теперь когда причина ясна, можно перейти к решениям:
  1. Самое простое раз мы видим, что при запуске происходит компиляция, возникает вопрос, а нельзя ли компиляцию провести один раз, и потом больше не тратить на неё время. Ответ - можно. Прекомпиляция не всегда является лучшим решением, поскольку в этом случае теряются некоторые возможности по оптимизации JIT компилятором, однако, тем не менее в подавляющем большинстве случаев это приводит к ускорению холодного запуска на 20-30%. В последней версии Nomad я включил файл Compile.bat, который компилирует все необходимые файлы.
  2. Вторая возможность - оптимизация запуска. В общем это попытка делать как можно меньше вспомогательных действий во время запуска до того как появится главное окно приложения. И в Nomad старается оптимизировать запуск, откладывая второстепенные задачи на потом.
  3. Ну и напоследок оптимизация загрузки. Понятно что от меня это зависеть не может, но к счастью, в Microsoft видят проблемы, и даже пытаются их решать. Итак совсем недавно, буквально неделю назад вышел .Net Framework 3.5 SP1. Который принёс с собой множественные оптимизации в загрузке связанных модулей (так же как и всяческих других оптимизаций) приводящее к уменьшению времени холодного запуска. Тут необходимо сказать, что Nomad написан с использованием .Net Framework 2, и 3.5 ему не нужен. Однако при установке данного обновления Nomad, так же как и любое другое .Net приложение начинает запускаться на 30-40% быстрее. Но как и во всём есть и отрицательные стороны, объём данного sp довольно велик и колеблется от 63 до 200мб. Примечание: линк для загрузки полного пакета (а не заглушки загружающей только необходимые части), находится чуть ниже на странице загрузки.
Ну вот в общем и всё что я хотел сказать, комбинируя пункты 1 и 3, можно добится уменшения времени запуска на 40-60% в зависимости от условий. Также хочется отметить что .net 3.5 sp1 привносит и другие улучшения и оптимизации, что должно положительно сказаться и на скорости работы приложений.

1 комментарий:

Anton комментирует...

Пользуюсь Nomad'ом довольно долгое время, спасибо вам. Раньше встречалось "подтормаживание" при смене диска, даже на топовых машинах... В последней версии пропало, опять таки - спасибо вам! Недавно Столкнулся с проблемой: запускаю Nomad " Невозможно перейти в папку 'С:\'. Элемент с тем же ключем уже был добавлен". В чем может быть проблема? WinXP sp2, Framework 3.0.