В общем есть некоторый кастомный аттрибут, который я закрепляю за методами.
Затем мне нужно этот атрибут достать. Но в чем проблема - этот атрибут может встретиться где угодно.
Сначала я подумал - да чего там, сейчас мигом это исправлю
И написал вот такой код
foreach (Assembly a in AppDomain.CurrentDomain.GetAssemblies())
{
    foreach (Type t in a.GetTypes())
    {
        var methods = t.GetMethods();
        foreach (var method in methods)
        {
            var attr = method.GetCustomAttribute(typeof(MyAttribute));
        }
    }
}
Но это, вызывается целых 5 секунд. Такого я естественно позволить не могу.
И я вот подумал - а как тогда вызываются всякие эти системные атрибуты? Ведь некоторые из них так же действуют "везде", но почему то от них не возникает тормозов.
В общем каким способом я могу значительно уменьшить время на вычисление методов, имеющих мой аттрибут?

Принятый ответ

Extravert, а ты смотрел какие сборки он возвращает, мб стоит из этого списка исключить системные? И еще наверное все же попробовать использовать не GetTypes а GetExportedTypes
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
29
10 лет назад
0
Может расскажешь конечную цель? И тогда я смогу помочь. Вообще обычно атрибуты достаются непосредственно у известного типа, а не проходятся по всей сборке
0
27
10 лет назад
0
В общем цель - помеченные атрибутом методы использовать в определенном месте. Это пожалуй всё. Методы могут находиться в пределах любой сборки любого класса.
Если еще точнее - для редактора сценариев в атрибуте помечаю сепаратор и название. А дальше подтягиваю эти данные где мне нужно. Атрибуты самый удобный способ пометить такие вещи. Отдельный класс не подходит, ибо пакую в отдельную сборку свой плагин, а это все будет ущербно выглядеть.
0
29
10 лет назад
0
Extravert, а что если во время инициализации получишь список и закешировать его?
0
27
10 лет назад
0
alexprey, я его и кеширую. Я вообще всегда кеширую данные, доставаемые иначе чем индексно из массива. Но первое обращение происходит очень долго. Даже кешируя это выглядит не красиво, ибо на 4 секунды все подвисает.
0
29
9 лет назад
0
Extravert, а ты смотрел какие сборки он возвращает, мб стоит из этого списка исключить системные? И еще наверное все же попробовать использовать не GetTypes а GetExportedTypes
Принятый ответ
0
27
9 лет назад
Отредактирован Devion
0
alexprey, да я уже примерно так и сделал :)
0
29
9 лет назад
0
Extravert, сильно выросло по скорости?
0
27
9 лет назад
0
alexprey, заметно. Подвисание пропало :)
0
29
9 лет назад
0
Extravert, неожиданно) Да тогда круто
0
27
9 лет назад
0
alexprey, вполне даже ожиданно. У меня программа перебирала все классы внутри каждой сборки. А меньше сборок - меньше классов.
0
29
9 лет назад
0
Extravert, ну я думал есть какой нить более извращенный способ :D
Чтобы оставить комментарий, пожалуйста, войдите на сайт.