【问题标题】:Is it worth saving the result of the typeof() call for multiple uses?是否值得保存 typeof() 调用的结果以供多次使用?
【发布时间】:2011-03-08 21:24:19
【问题描述】:

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

【问题讨论】:

  • 在现实条件下进行双向基准测试,以确定真正的影响是什么;这是知道的唯一途径。其他任何事情都是人们猜测。您想根据知识还是猜测做出编码决定?

标签: c# .net optimization typeof


【解决方案1】:

不,typeof() 是编译时关键字。

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


更新

Type t = typeof(string);

这就是这一行的编译结果

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,我想这里的句柄是指向堆中类型位置的指针。

因此,调用一次并保留引用可能会有一点好处,尽管微乎其微。

【讨论】:

  • 附加信息:这篇 MSDN 杂志文章讨论了哪些反射操作快哪些慢:msdn.microsoft.com/en-us/magazine/cc163759.aspx。警告:“动态”和 DLR 的出现改变了其中的一些信息,因为有旨在提高反射性能的优化。如果您直接使用 System.Reflection,那么这些优化当然不会发挥作用。
  • 是的,这是一篇很棒的文章。
猜你喜欢
  • 1970-01-01
  • 2013-04-07
  • 1970-01-01
  • 2012-06-16
  • 1970-01-01
  • 2017-07-02
  • 1970-01-01
  • 2013-05-21
  • 1970-01-01
相关资源
最近更新 更多