2010-09-28 2 views
0

Я пытаюсь найти 33 .dll, чтобы найти ссылки на метод. Для всех DLL и поиска ссылок требуется более 10 минут. Есть ли способ ускорить работу.методы поиска быстрее

каждый из этих библиотек примерно 450 классов, и каждый из этого класса имеет приблизительно 200 методов каждого

Шаг что я следую:

assemblyName = System.IO.Path.GetFullPath(file) 
assembly = System.Reflection.Assembly.LoadFile(assemblyName) 

Dim types = assembly.GetTypes() 
For Each Type In types 
    methods = Type.GetMethods() 
    For Each method In methods 
    'save method info, class type 
    Next 
Next 
+2

Отражение, как известно, медленное. Возможно, вам придется перепроектировать решение, чтобы не было необходимости использовать отражение. Каково ваше требование высокого уровня? Вероятно, есть лучший способ добиться этого. – Polyfun

+1

Да, серьезно, что вы * на самом деле * пытаетесь сделать? – AakashM

+0

Спасибо за ваши ответы ... То, что я пытаюсь сделать, это как - рекурсивное найти все ссылки на Visual Studio. Итак, как и я начинаю с поиска ссылок на метод, а затем я нахожу ссылки на все методы, вызывающие этот метод, и так далее, пока не дойду до точки, где у меня больше нет метода вызова этих методов (то есть, Я достигаю слоя пользовательского интерфейса, aspx.vb) Любые предложения о том, какие другие подходы могут позволить мне достичь этого? – Anshul

ответ

1

Вы можете пройти через ваши 33 библиотек и сохранить результат что вы ищете в базе данных. А затем вместо того, чтобы спрашивать свои библиотеки, спросите свою базу данных, она будет быстрее и даст вам прямое право на стук ... (я имею в виду, что вы можете указать прямо на хорошую библиотеку и хороший класс, чтобы получить дополнительную информацию или instanciate какой-то объект, ...)

Мой комментарий не настолько ясен, поэтому я обновляю свой ответ.

Перед запуском новой версии вы заполните базу данных новыми значениями вашего проекта с помощью ключа, относящегося к вашей версии курса. При этом при запуске нового приложения вам не придется ждать 10 минут, чтобы получить ваши материалы, потому что вы уже использовали 10 минут до того, чтобы скрыть, чтобы заполнить базу данных. Если ваше приложение перезапустится, но без изменений в ваших библиотеках, информация все равно будет здесь, потому что версия будет такой же.

Я желаю вам удачи в любом случае для вашего проекта ...

+0

Спасибо за ответ, но эти библиотеки время от времени меняются и обновляются, поэтому сохранение данных, однажды полученных в БД, немного невозможно. Я сохраняю его в массиве типа struct на время запуска приложения, но если приложение перезапускается, нам нужно будет снова искать библиотеки. Необходимо просматривать все методы. – Anshul

+0

Попытка получить некоторую настойчивость над перестройкой приложения может быть немного сложнее. См. Мой ответ обновлен .. – Arthis

1

Я знаю много причудливых инструментов, в том числе и PostSharpNDepend (который является отличным инструментом) использовать Cecil. Это должно быть лучше, чем анализ .NET для некоторых вещей.

Попробуйте ...

Смежные вопросы