Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 缓存类型.GetXYZ_C#_.net_Reflection_Caching - Fatal编程技术网

C# 缓存类型.GetXYZ

C# 缓存类型.GetXYZ,c#,.net,reflection,caching,C#,.net,Reflection,Caching,在一段特定的代码中,我多次调用Type.GetFields()。一次呼叫可以呼叫它5次或更多次。另外,一段代码可以迭代数千次。ATM我不需要进行优化,但我想知道我是否需要优化 我如何缓存这个?我希望我可以像obj.GetType().Tag[“myCacheId”]这样做,并提取缓存数据。但我怀疑我能做到这一点。我可以以某种方式将数据附加到类型吗?我真的希望我不要求助于单身汉。如何缓存与类型相关的数据?只需将其粘贴在字段信息[]中的某个位置,例如在方法的开头或循环之前: FieldInfo[]

在一段特定的代码中,我多次调用Type.GetFields()。一次呼叫可以呼叫它5次或更多次。另外,一段代码可以迭代数千次。ATM我不需要进行优化,但我想知道我是否需要优化


我如何缓存这个?我希望我可以像obj.GetType().Tag[“myCacheId”]这样做,并提取缓存数据。但我怀疑我能做到这一点。我可以以某种方式将数据附加到类型吗?我真的希望我不要求助于单身汉。如何缓存与类型相关的数据?

只需将其粘贴在
字段信息[]
中的某个位置,例如在方法的开头或循环之前:

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

CLR已缓存元数据。第一次调用时速度非常慢,将其从程序集中挖出,之后速度很快。缓存自己不会有任何区别。

如果有许多类型,可以使用字典从每个类型映射到该类型的缓存信息。(但这只有在字典查找速度比Type.GetFields操作快的情况下才有帮助!)

我需要理解为什么要对某个对象进行数千次的迭代,其中需要从很多类型中获取字段才能给出适当的答案。虽然如此,通常,您仍然可以通过消除方法调用来改进它。我听过一次,但并没有向我清除缓存的内容。如果是我接触到的元数据,那么很棒=)。当我真的需要的时候,我会做一个测试。现在想想,我的代码应该足够快了。