Как получить список всех типов (полностью определенных), созданных при запуске приложения - PullRequest
1 голос
/ 12 января 2012

Я борюсь с быстрым стартом приложения, которое является смесью .NET и COM.Под холодным стартом я подразумеваю запуск приложения после перезагрузки компьютера (что часто происходит на развернутой платформе Panasonic Toughbooks).

Холодный запуск занимает примерно в 3 раза больше времени, чем теплый запуск (110 секундпротив 35 секунд).

Используя монитор процесса, я определил, что основное различие между холодным и теплым запуском заключается во времени, необходимом для доступа к dll - в основном из GAC, но также из Windows \ microsoft.net инесколько других папок.

Я рассмотрел следующие связанные публикации и фактически реализовал некоторые из предложений:

Результат, похоже, мне нуженполучить либо сборки IL, либо их нативные образы, «предварительно загруженные» в системный кеш.[Я понимаю, что нет гарантии, что они все еще будут там, когда приложение действительно будет запущено, а также, что это, вероятно, увеличит время загрузки.] Согласно некоторым из приведенных выше постов, этот подход используется Acrobat Reader и Microsoft Office.

Моя сложность заключается в том, что используемые сторонние библиотеки очень велики, поэтому нецелесообразно предварительно загружать все типы в все ссылочных сборок.Я просто хочу загрузить типы, которые на самом деле загружаются во время запуска приложения.Итак, как мне определить только эти типы и содержащие их сборки?

Другой подход, который я рассматриваю, заключается в том, чтобы каким-то образом запустить (и впоследствии уничтожить) приложение в «фоновом режиме», но не уверен, что это можно сделать сприложение для Windows.

Спасибо за любые предложения.

1 Ответ

0 голосов
/ 13 января 2012

После дальнейших исследований поступили предложения от коллег:

Один из способов получения такого списка, который я нашел, - это приложение dotTracePerformance от Jet Brains.

Но я также обнаружил, что по крайней мере часть этой информации уже содержится в файле «prefetch», связанном с приложением, в папке C: \ Windows \ Prefetch. Это двоичные файлы, но для просмотра содержимого можно использовать такой инструмент, как winPrefetchView.

К сожалению, по умолчанию Windows записывает только первые несколько секунд запуска приложения в файл предварительной выборки. Это время настраивается в реестре, но (как описано в сообщении Значения реестра средства предварительной выборки Windows XP ) интерпретация этого двоичного ключа неясна.

У меня была идея каким-то образом принудительно выполнить предварительную выборку для приложения при запуске системы, но я не нашел способа сделать это с помощью win api. (Несколько хаков по этим направлениям не оказали существенного влияния.)

В любом случае у меня есть ответ на исходное сообщение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...