Memory usage when converting methods to static met

2019-04-06 03:31发布

问题:

I started using Resharper and it indicated when a method could be made static. Would converting a few hundred methods to static methods increase the memory footprint over a large period of time?

回答1:

No - Changing to static methods has no effect on memory.

The first time a type is referenced (whether static or non-statically), any static members are initialized and static constructors are run.

However, if you're just considering switching methods from non-static to static, this will have no effect on garbage collection or total memory footprint.

You only have to worry about memory footprint changing if you change class members to be static members. In this case, static fields will stay rooted once the type is accessed, and will not get collected by the GC. This is typically only done when necessary, and by design - you make a member static because you want it to persist.



回答2:

From the JIT compiler's point of view, there is no difference between a static and an instance method. The machine code for them is very similar, it gets stored in the same kind heap. The only difference is that an instance method has an extra argument.

That extra argument needs to be passed when the method is called. That can cost an extra machine code instruction but not that often. The CPU register (ECX) frequently already has the correct value. There is a difference if an instance method has more than one argument on x86 or more than three on x64, an extra argument has to be passed on the stack rather than through a CPU register. One extra instruction.

Worst case, you are looking at a bit less than a nanosecond. That's going to be hard to measure, the usual problem with micro-optimizations.