vik*_*iky 3 c# performance static-methods
静态方法相对于非静态方法的性能问题是什么?我已经读过静态方法在性能方面更好但我想知道它们如何更快?如果方法没有使用任何实例成员,那么我们的编译器应该处理它并将其视为静态方法.
编辑:埃里克评论更多关于这个在这里,并暗示有是当一些时间call用来......但请注意他的new()例子并不保证 ;-p
在原始编译器(1.1之前版本)中,编译器确实将非虚拟实例方法(没有this)视为静态; 问题是这导致了一些奇怪的null检查问题,即
obj.SomeMethod();
Run Code Online (Sandbox Code Playgroud)
没有抛出异常(for obj=null和非虚拟方法SomeMethod没有触及this).如果你改变了实施,这是不好的SomeMethod.当他们调查添加显式空检查的成本(即null-check然后静态调用)时,结果与使用虚拟调用相同,所以他们这样做了,这使得它更灵活,可预测的.
请注意,如果是扩展方法(静态),则"不抛出异常"也完全是行为SomeMethod.
我想有一次你可以通过静态调用发出IL来调用常规实例方法,但是我最后一次尝试时得到了"哦,不,你没有!" 来自CLR的消息(此操作可能会破坏运行时的稳定性); 要么他们完全阻止了这一点,要么(也许更有可能)我自定义IL.
是的,静态调用会更快 - 在调用方法之前,不需要创建对象的实例.(虽然你显然不会注意到差异)
实际上,编译器是否优化方法(使实例方法为静态)并不重要 - 除非您已经创建了实例,否则不会调用实例方法,对吧?
在一天结束时,您应该尝试优化代码以实现可维护性,而不是尝试在此处或那里节省3纳秒.