2009-09-22 2 views
4

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

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

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

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

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

+0

Ух, звучит как ужасная проблема. Посмотрите вперед к ответу. Вы подтвердили, что файлы machine.config идентичны? Является ли .DLL для каких-либо сетевых вызовов? – womp

+0

@ Alex K: Что это было? У меня очень похожая проблема. вы помните свое решение? –

+0

@ ralf.w. Извините, никакой большой информации не было получено за время расследования. Поскольку было время, мы просто закончили замену машины.Мой подозреваемый №1 был антивирусом, но я не мог следить. Вы можете попробовать отключить его (если позволяет ваша ИТ-политика) и посмотреть, помогает ли это. –

ответ

2

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

1

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

  1. Disable Just My Code (Tools - > Параметры - > Debugger - > Общее)
  2. Запустите программу под отладчиком
  3. Wait для зависания
  4. Hit ломать.
  5. Откройте стек вызовов

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

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

+0

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