Nano Hash - криптовалюты, майнинг, программирование

Измерение производительности запуска приложений

Я использую C ++ / CLI в Windows. Это приложение MFC, созданное с помощью / clr.

Я хочу проверить, сколько времени требуется моему приложению для запуска. В первый раз потребовалось 10 секунд, потом - 4, 4, 5. Я предполагаю, что это связано с тем, что Windows кеширует библиотеки DLL.

Есть ли какой-нибудь инструмент, который позволит мне удалить каталог из кеша, чтобы мои условия тестирования каждый раз были одинаковыми? Я не хочу перезагружаться между тестами :)


  • какой язык программирования / платформу вы используете? время запуска в .net сначала самое высокое, потому что он компилируется из CIL только при первом запуске, а затем последующие запуски выполняются быстрее. 28.09.2009
  • Ах ты прав я забыл ту часть :) отредактирую вопрос 28.09.2009
  • ... но я все равно хотел бы иметь возможность воссоздать результат 10 секунд без перезагрузки (возможно, очистить кеш GAC или что-то в этом роде?) 28.09.2009

Ответы:


1

Если вы используете платформу .Net, скорее всего, эти 6 секунд ждут инициализации инфраструктуры (загрузки mscoree.dll и т. Д.). Написанная статья наизнанку CLR: повышение производительности запуска приложений для журнала MSDN.

При холодном запуске необходимо загрузить всю .NET Framework, а также запустить JIT-компилятор для генерации кода.

В большинстве случаев холодный запуск ограничен вводом-выводом. Другими словами, на ожидание данных тратится больше времени, чем на обработку инструкций. Время, необходимое для запуска приложения, равно времени, которое требуется ОС для выборки кода с диска, плюс время, необходимое для выполнения дополнительной обработки, такой как JIT-код IL и любая другая инициализация, которая выполняется в пути запуска применение. Поскольку обработка обычно не является узким местом при холодном запуске, первоначальная цель любого исследования производительности при запуске приложения - уменьшить доступ к диску за счет уменьшения количества загружаемого кода.

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

Лучшее, что вы можете сделать, чтобы уменьшить время запуска, - это уменьшить количество вызовов .Net framework до того, как появится ваше первое окно (так как все это необходимо будет скомпилировать перед запуском) и уменьшить количество дисковых операций ввода-вывода. необходимо для запуска вашей программы.

После того, как ваша программа запущена и работает, любой некомпилированный IL из .Net будет скомпилирован JIT-компилятором при его первом вызове.

Кроме того, насколько мне известно, после загрузки Framework не существует простого способа выгрузить его без перезагрузки (если вы можете выгрузить его вообще). Сохранение виртуальной машины в сохраненном состоянии непосредственно перед загрузкой Framework может значительно сократить время, необходимое для «перезагрузки».

28.09.2009
  • Спасибо, я сделал виртуальную машину, чтобы избежать перезагрузки, но до сих пор забыл отметить это как принятый ответ :) 18.11.2009

  • 2

    То, что сказал Джошуа, плюс посмотрите на третий абзац этот ответ.

    17.11.2009
  • @demon: Извините, мой код может быть быстрым, но я медленным. Я не понимаю. 18.11.2009
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..