C#性能问题:typeof(MyClass)与this.GetType()

时间:2011-03-27 17:45:53

标签: c# .net performance

log4net configuration manual的第一个示例中,作者使用typeof(MyApp)来获取包含类MyApp的类型。是否有理由不使用this.GetType(),性能方面?因为在我看来,this.GetType()在复制到另一个类时可能会因潜在的复制粘贴错误而更加安全。

2 个答案:

答案 0 :(得分:88)

typeof(Foo)是静态类型查找;本质上它发生在编译时,所以你只得到明确命名的类型。

GetType()是动态类型查找;它是一个在运行时被调用的虚方法,即使你使用多态也会给你确切的类型。从理论上讲,它“慢”,但是它会给你一些你无法从typeof(T)获得的东西。如果你的设计需要一个或另一个,速度不会成为一个因素。

答案 1 :(得分:15)

除了性能问题之外,在提供的示例中,GetType甚至不是一个选项,因为它是实例方法;它不能从字段初始化程序中调用。在任何情况下,由于意图是从静态“上下文”初始化静态字段,逻辑上this引用不可用 - 所以沿着静态构造函数路由下去允许GetType允许。

// Can't use GetType() - the this reference is not available.
private static readonly ILog log = LogManager.GetLogger(typeof(MyApp));