静态与非静态方法

Ela*_*lad 30 c# performance

假设您在非静态类中有一些可以变为静态的方法.
例如:

private double power(double a, double b)
    {
        return (Math.Pow(a, b));
    }
Run Code Online (Sandbox Code Playgroud)

您是否看到将方法签名更改为静态有什么好处?在上面的例子中:

private static double power(double a, double b)
    {
        return (Math.Pow(a, b));
    }
Run Code Online (Sandbox Code Playgroud)

即使有一些性能或内存增益,编译器也不会在编译时进行简单的优化吗?


编辑:我正在寻找的是将方法声明为静态的好处.我知道这是常见做法.我想了解它背后的逻辑.
当然,这种方法只是澄清我的意图的一个例子.

jas*_*son 33

根据定义,power是无状态的,并且对任何封闭类没有副作用,因此应该声明它static.

MSDN中的这篇文章介绍了非静态与静态的一些性能差异.调用的速度比实例化和调用快四倍,但它确实只是在一个性能瓶颈的紧密循环中才有意义.

  • 良好的链接,但是从2003年开始就采用一粒盐.例如,调用委托并不比调用实例方法慢8倍,但今天它的速度接近2倍. (8认同)

Tho*_*que 8

如果将方法声明为static,应该会有轻微的性能提升,因为编译器将发出callIL指令而不是callvirt.

但就像其他人所说的那样,无论如何它应该是静态的,因为它与特定的实例无关


jer*_*jvl 7

请注意,编译器甚至不太可能代表您进行更改,因为它会更改方法的签名.因此,一些精心设计的反射(如果您使用任何反射)可能会停止工作,编译器实际上无法判断是否是这种情况.