gpt4 book ai didi

c# - 缓存或不缓存 - GetCustomAttributes

转载 作者:可可西里 更新时间:2023-11-01 03:13:43 26 4
gpt4 key购买 nike

我目前有一个功能:

public static Attribute GetAttribute(MemberInfo Member, Type AttributeType)
{
Object[] Attributes = Member.GetCustomAttributes(AttributeType, true);

if (Attributes.Length > 0)
return (Attribute)Attributes[0];
else
return null;
}

我想知道是否值得将一个属性的所有属性缓存到一个Attribute = _cache[MemberInfo][Type] 字典,

这需要使用不带任何类型参数的 GetCustomAttributes 然后枚举结果。值得吗?

最佳答案

如果你用这个替换你的方法的主体,你会得到更好的刘海:

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)
{
// ...
}
}

每次都胜过字典查找。而且它是线程安全的:)

干杯,弗洛里安

PS:取决于您调用它的频率。我遇到过一些情况,使用反射进行大量序列化实际上需要缓存,像往常一样,您想要衡量性能增益与内存使用量增加的关系。检测您的内存使用情况并分析您的 CPU 时间。

关于c# - 缓存或不缓存 - GetCustomAttributes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1612122/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com