Улучшение COM Interop Холодный старт - PullRequest
1 голос
/ 15 февраля 2012

У нас есть приложение VB6, которое запускает наш код .NET при запуске.

Холодный запуск занимает примерно 22 секунды на компьютере с Windows XP. Тёплый старт - около 4 секунд на одной машине.

Windows Vista / 7 занимает около 5 секунд для холодного запуска и около 3 секунд для горячего запуска.

Исходя из вышеизложенного, я предполагаю, что задержки связаны с доступом к диску, а Vista / 7 не подвержена влиянию SuperFetch.

Очевидно, нам нужно улучшить производительность холодного запуска для XP. Я подумываю о создании «прогревающего» приложения, которое запускается в системном трее при запуске Windows ... но прежде чем мы потратим усилия, я хотел посмотреть, есть ли другие предложения.

Я пытался создать наши сборки, и, похоже, это ничего не меняет.

После добавления некоторого кода трассировки я вижу, что код VB6 пересекает границу .NET всего за 1 секунду ... но код инициализации в .NET занимает около 20 секунд. Это имеет некоторое отражение, и я предполагаю, что задержка загрузки сборок GAC с диска ... но я не могу быть полностью уверен.

Предложения

1 Ответ

2 голосов
/ 16 февраля 2012

Я бы попробовал следующее:

  • Выкрутил интерфейс .NET для вашего кода .NET.Посмотрите, займет ли это столько же времени.Если нет (я сомневаюсь в этом), то проблема связана с Interop.
  • Поскольку перекрестное переключение выполняется за секунду, я бы профилировал код .NET.Загрузите пробную версию Ants Profiler и посмотрите, в чем проблема.
  • Наконец, добавьте действие ProcMon, чтобы увидеть, к каким файлам обращаются - это может дать вам подсказку.

Я не думаю, что библиотеки GAC загружаются так долго.Я предполагаю, что код делает больше отражений, чем вы думаете.

...