将方法转换为静态方法时的内存使用

时间:2010-06-25 17:25:57

标签: c# garbage-collection static-methods

我开始使用Resharper,它表示 方法可以静态化。将几百种方法转换为静态方法会在很长一段时间内增加内存占用量吗?

2 个答案:

答案 0 :(得分:15)

否 - 更改为静态方法对内存没有影响。

第一次引用类型(无论是静态还是非静态),初始化任何静态成员并运行静态构造函数。

但是,如果您只是考虑将方法从非静态切换到静态,这将对垃圾收集或总内存占用量没有影响。

如果将类成员更改为静态成员,则只需担心内存占用量的变化。在这种情况下,静态字段将在访问类型后保持root状态,并且不会被GC收集。这通常仅在必要时进行,并且通过设计 - 您将成员静态化,因为您希望它保持不变。

答案 1 :(得分:7)

从JIT编译器的角度来看,静态和实例方法之间没有区别。它们的机器代码非常相似,它存储在同一堆堆中。唯一的区别是实例方法有一个额外的参数。

调用方法时需要传递额外的参数。这可能会花费额外的机器代码指令但不经常这样。 CPU寄存器(ECX)经常具有正确的值。如果实例方法在x86上具有多个参数或在x64上具有多于3个参数,则存在差异,必须在堆栈上而不是通过CPU寄存器传递额外参数。一条额外的指示。

最糟糕的情况是,你看的时间不到一纳秒。这很难衡量,这是微优化的常见问题。