【问题标题】:getting this Type获取此类型
【发布时间】:2010-07-09 19:01:56
【问题描述】:
class TestClass
{
    public void Test()
    {
        //which is faster?
        object o1 = MethodRequiringType(typeof(TestClass));
        object o2 = MethodRequiringType(this.GetType());
        //which is better?
        //does it matter?
    }

    public object MethodRequiringType(Type t)
    {
        return new { }; 
    }
}

【问题讨论】:

标签: c#


【解决方案1】:

谷歌快速搜索发现:

GetType 是在 对象实例上的运行时。 typeof() 被解析为调用 运行时,但从 类型的标记。他们大概 解决同一个电话,只是 GetType 需要一个实例。如果 我不需要实例,我会 使用 typeof。

还有:

还要注意 GetType 是虚拟的, 并为您提供对象的类型, 不是声明的类型 参考。那就是:

对象 o = new String();

typeof(o) 对象类型

o.GetType() 字符串类型

【讨论】:

  • 在你的第二个例子中,你不是说o.GetType()而不是typeof(o)吗?
【解决方案2】:

在执行之前担心正确性。如果有任何类派生自TestClass,您将不会得到相同的结果。

【讨论】:

  • 如果是密封类呢?
  • 那么你会得到相同的Typetypeof 会更快。
【解决方案3】:

【讨论】:

  • 您引用的第二篇文章说typeof() 的好处是您不需要构造相关类型的对象。然而,在上面的例子中,对象已经被构造了。
【解决方案4】:

我实际上已经在我曾经做过的一次讲座(关于反射和优化)中测量了这种差异。

底线:如果您计划调用该线路数十亿次,使用typeOf() 而不是GetType() 将节省一秒

【讨论】:

  • 我在某处 (msdn.microsoft.com/en-us/magazine/cc163759.aspx) 读到关于 Reflection 的 GetType 调用在 JIT 编译器中经过专门优化,因为它是一种常用的方法,而不是其他反射操作,例如查找类型的特定成员的 MemberInfo。
  • GetType 已优化。这仍然不如 typeof 快。
  • @Ben,我绝对同意。我并不是说我建议在一般情况下使用 GetType 而不是 typeof,所以谢谢你抓住我。文章里其实也提到了typeof操作也进行了优化。
  • 我的意思是区别一点都不重要。与在 GetType/typeof 上节省几纳秒相比,存在许多影响更大的性能瓶颈
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多