Тип кеширования. GetXYZ - PullRequest
1 голос
/ 13 января 2010

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

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

Ответы [ 3 ]

3 голосов
/ 13 января 2010

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

0 голосов
/ 13 января 2010

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

0 голосов
/ 13 января 2010

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

FieldInfo[] fields = Type.GetFields((BindingFlags.Public | 
    BindingFlags.Static | BindingFlags.Whatever));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...