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

Ily*_*gan 38 .net c# performance

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

Mik*_*keP 88

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

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


Ani*_*Ani 15

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

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

  • @Ani,但是当对象和类型名称都已知时,性能呢? (4认同)