Вы получите лучшие удары за свои деньги, если вы замените тело вашего метода следующим:
return Attribute.GetCustomAttribute(Member, AttributeType,false); // only look in the current member and don't go up the inheritance tree.
Если вам действительно нужно кешировать данные на основе типов:
public static class MyCacheFor<T>
{
static MyCacheFor()
{
// grab the data
Value = ExtractExpensiveData(typeof(T));
}
public static readonly MyExpensiveToExtractData Value;
private static MyExpensiveToExtractData ExtractExpensiveData(Type type)
{
// ...
}
}
Beats словарь поиска каждый раз. Плюс это потокобезопасный:)
Ура,
Florian
PS: Зависит от того, как часто вы это называете. У меня были случаи, когда выполнение сериализации с использованием рефлексии действительно вызывало кеширование, как обычно, motus operandi:
- запись
- Тест
- Debug
- Тест снова
- профиль процессора
- Профиль Mem
- Оптимизировать
- Еще раз проверить
- CPU Profile
- MEM Profile Это важно, поскольку ваша оптимизация кода, связанного с процессором, непременно перенесет нагрузку на память