【问题标题】:C# performance question: typeof(MyClass) vs. this.GetType()C# 性能问题:typeof(MyClass) 与 this.GetType()
【发布时间】:2011-03-27 17:45:52
【问题描述】:

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

【问题讨论】:

  • 当你没有实例的时候,只有TYPEOF可用,不是吗?

标签: c# .net performance


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 你说得对,我怎么没注意到static关键字:)
    • @Ani,但是当对象和类型名称都已知时,性能呢?
    猜你喜欢
    • 2017-08-02
    • 1970-01-01
    • 2010-12-04
    • 2011-04-16
    • 1970-01-01
    • 1970-01-01
    • 2012-07-01
    • 1970-01-01
    • 2018-10-13
    相关资源
    最近更新 更多