2010-01-12 3 views
1

В определенной части кода i cal Type.GetFields() много раз. Один вызов может называться 5 раз и более. Также фрагмент кода мог повторяться тысячи раз. ATM i dont нужен, чтобы оптимизировать, но я спрашиваю, поэтому, если мне нужно, я знаю, как это сделать.кеширование Тип.GetXYZ

Как я могу кэшировать это? Я надеюсь, что смогу сделать что-то вроде obj.GetType(). Отметьте ["myCacheId"] и вытащите кешированные данные. Но я сомневаюсь, что смогу это сделать. Могу ли я прикрепить данные к типу? Я действительно надеюсь, что я не прибегаю к синглу. Как я могу кэшировать данные, относящиеся к типу?

+0

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

ответ

3

Среда CLR уже кэширует метаданные. Очень медленно при первом вызове, когда он вырыт из сборки, быстро после этого. Кэширование себя не будет иметь никакого значения.

+0

Хотя это правда, вы часто можете улучшить его, исключив вызовы методов. – codekaizen

+0

Я слышал это однажды, но мне не было очищено то, что было кешировано. Если его метаданные касаются, то big =). Я сделаю тест, когда мне действительно нужно. Теперь, подумав об этом, мой код должен быть достаточно быстрым. – 2010-01-12 22:27:12

0

Просто вставьте его в FieldInfo[] где-то, как в начале вашего метода или перед петлей:

FieldInfo[] fields = Type.GetFields((BindingFlags.Public | 
    BindingFlags.Static | BindingFlags.Whatever)); 
0

Если у вас есть много типов, вы можете использовать словарь для сопоставления каждого типа кешированной информации для этого типа. (Но это поможет только в том случае, если поиск в словаре быстрее, чем операция Type.GetFields!)

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