Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.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# 是否值得保存typeof()调用的结果以供多次使用?_C#_.net_Optimization_Typeof - Fatal编程技术网

C# 是否值得保存typeof()调用的结果以供多次使用?

C# 是否值得保存typeof()调用的结果以供多次使用?,c#,.net,optimization,typeof,C#,.net,Optimization,Typeof,如果要对同一类型使用C#typeof调用的结果,是否值得保存该值,或者只需多次调用typeof()。对我来说,多个typeof更可取,因为它可以提供更简洁、可读的代码。我想这取决于编译器是否“内联”代码?否,typeof()是编译时关键字 将object.GetType()的结果保存在Type变量中可能有一点好处 更新 这就是这一行的编译目的 IL_0000: nop IL_0001: ldtoken [mscorlib]System.String IL_0006: cal

如果要对同一类型使用C#typeof调用的结果,是否值得保存该值,或者只需多次调用typeof()。对我来说,多个typeof更可取,因为它可以提供更简洁、可读的代码。我想这取决于编译器是否“内联”代码?

否,
typeof()
是编译时关键字

object.GetType()的结果保存在
Type
变量中可能有一点好处


更新 这就是这一行的编译目的

IL_0000:  nop
  IL_0001:  ldtoken    [mscorlib]System.String
  IL_0006:  call       class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
  IL_000b:  stloc.0
  IL_000c:  ldloc.0
所以在内部,它将使用
GetTypeFromHandle
,我认为这里的handle是指向堆中类型位置的指针


因此,只调用一次并保留引用可能会有一点好处,尽管这很小。

其他信息:这篇MSDN杂志文章讨论了哪些反射操作快,哪些慢:。警告:“动态”和DLR的出现改变了其中一些信息,因为有一些旨在提高反射性能的优化。如果您直接使用System.Reflection,当然,这些优化不会发挥作用。是的,这是一篇很棒的文章。在现实条件下对这两种方法进行基准测试,以确定真正的影响;这是唯一知道的方法。其他任何事情都是人们猜测的。您想根据知识或猜测来做出编码决策吗?
IL_0000:  nop
  IL_0001:  ldtoken    [mscorlib]System.String
  IL_0006:  call       class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
  IL_000b:  stloc.0
  IL_000c:  ldloc.0