C# 缓存类型.GetXYZ
在一段特定的代码中,我多次调用Type.GetFields()。一次呼叫可以呼叫它5次或更多次。另外,一段代码可以迭代数千次。ATM我不需要进行优化,但我想知道我是否需要优化C# 缓存类型.GetXYZ,c#,.net,reflection,caching,C#,.net,Reflection,Caching,在一段特定的代码中,我多次调用Type.GetFields()。一次呼叫可以呼叫它5次或更多次。另外,一段代码可以迭代数千次。ATM我不需要进行优化,但我想知道我是否需要优化 我如何缓存这个?我希望我可以像obj.GetType().Tag[“myCacheId”]这样做,并提取缓存数据。但我怀疑我能做到这一点。我可以以某种方式将数据附加到类型吗?我真的希望我不要求助于单身汉。如何缓存与类型相关的数据?只需将其粘贴在字段信息[]中的某个位置,例如在方法的开头或循环之前: FieldInfo[]
我如何缓存这个?我希望我可以像obj.GetType().Tag[“myCacheId”]这样做,并提取缓存数据。但我怀疑我能做到这一点。我可以以某种方式将数据附加到类型吗?我真的希望我不要求助于单身汉。如何缓存与类型相关的数据?只需将其粘贴在
字段信息[]
中的某个位置,例如在方法的开头或循环之前:
FieldInfo[] fields = Type.GetFields((BindingFlags.Public |
BindingFlags.Static | BindingFlags.Whatever));
CLR已缓存元数据。第一次调用时速度非常慢,将其从程序集中挖出,之后速度很快。缓存自己不会有任何区别。如果有许多类型,可以使用字典从每个类型映射到该类型的缓存信息。(但这只有在字典查找速度比Type.GetFields操作快的情况下才有帮助!)我需要理解为什么要对某个对象进行数千次的迭代,其中需要从很多类型中获取字段才能给出适当的答案。虽然如此,通常,您仍然可以通过消除方法调用来改进它。我听过一次,但并没有向我清除缓存的内容。如果是我接触到的元数据,那么很棒=)。当我真的需要的时候,我会做一个测试。现在想想,我的代码应该足够快了。