Страницы

Поиск по вопросам

воскресенье, 31 марта 2019 г.

Поиск сборки (алгоритм)

Подскажите оптимальный способ поиска сборки. Например в папке лежит 1k сборок (*.dll) и нужно выбрать например две специальные сборки. Как нужно пометить (атрибуты? вроде медленно будет искать рефлекшеном) специфические сборки, для быстрого поиска в другой программе?
Может есть какой то способ дописать что то в мета-таблцицы сборки что бы очень быстро можно было прочитать и понят эта та сборка, что нужно, или нет?


Ответ

Вы можете воспользоваться библиотекой Mono.Cecil (доступна так же через NuGet) и использовать ее для анализа сборок
Для теста я взял почти все сборки из GAC, скопировал их, чтобы получилось ~1 тысяча сборок, добавил туда несколько экземпляров моих библиотек с искомым атрибутом и выполнил такой код:
var assemblys = Directory.GetFiles("C:\\dlls\\") .Select(AssemblyDefinition.ReadAssembly) .Where(assembly => assembly.CustomAttributes.Any(ca=> ca.AttributeType.Name == "MyCustomAttribute")) .ToList();
Результат он выдал через ~600 миллисекунд (мерил с помощью Stopwatch). Мне кажется, что этого может быть для Вас достаточно.

Комментариев нет:

Отправить комментарий