Отслеживание медленной управляемой загрузки DLL - PullRequest
4 голосов
/ 23 сентября 2009

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

Вот настройки: У меня есть сторонняя DLL, которая должна быть зарегистрирована в GAC. Все это прекрасно работает на каждой машине, на которой ранее было установлено наше программное обеспечение. Но теперь у нас есть 2 машины, по-видимому, идентичные тем, которые мы знаем, работают (они клонированы из одного и того же образа и заполнены одним и тем же оборудованием, так что почти единственное отличие состоит в настройках программного обеспечения, над которыми я работал много раз, и они вроде нормально).

Теперь проблема, DLL в GAC загружается очень долго. По крайней мере, я считаю, что это проблема, и я могу однозначно сказать, что создание экземпляра одного класса из этой DLL - медленная часть. Как только он загружен, вещи летают, как они всегда. Но хотя на зарекомендовавших себя компьютерах DLL загружается так быстро, что временная метка в журнале даже не меняется, на этих 2 машинах для загрузки требуется более 1 мин .

Knowns: У меня нет доступа к источнику, поэтому я не могу отлаживать через DLL. Наше приложение является единственным, которое использует его (поэтому не должно быть проблем одновременного доступа). Существует только одна версия этой DLL, поэтому это не должно быть связано с конфликтом версий. Ссылка GAC используется (если я удалю DLL из GAC, будет исключение из-за отсутствующей ссылки GAC).

Может ли кто-нибудь с большим навыком отладки-фу предложить, что я могу сделать, чтобы отследить причину этой проблемы?

Ответы [ 2 ]

2 голосов
/ 28 марта 2010

загрузите 2 небольшие утилиты: 'filemon.exe' и 'regmon.exe', которые показывают вам, что происходит с файлами и реестром соответственно. Всякий раз, когда я не могу решить, зависает ли программа или просто загружается, эти инструменты дают мне представление о том, что они делают или чего они ждут.

1 голос
/ 23 сентября 2009

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

  1. Отключить только мой код (Инструменты -> Параметры -> Отладчик -> Общие)
  2. Запустить программу под отладчиком
  3. Ждите зависания
  4. Хит перерыв.
  5. Открыть стек вызовов

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

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

...