使用静态类,比立即使用它慢
本文关键字:静态类 | 更新日期: 2023-09-27 18:27:57
我注意到,如果我使用静态类中的代码,它会比直接在我想要的地方运行它慢。
例如:
static class FastMethods
{
public static byte[] GetBytes(int index, long value)
{
byte[] target = new byte[sizeof(Int32)];
target[index++] = (byte)value;
target[index++] = (byte)(value >> 8);
target[index++] = (byte)(value >> 16);
target[index] = (byte)(value >> 24);
return target;
}
}
这里有我想在一个单独的类中使用的代码,这样我可以使它更有条理。现在这比我这样做要慢:
int index = 0;
long value = ms.Length;
byte[] target = new byte[sizeof(Int32)];
target[index++] = (byte)value;
target[index++] = (byte)(value >> 8);
target[index++] = (byte)(value >> 16);
target[index] = (byte)(value >> 24);
两者使用相同的数字做完全相同的事情。如果我使用静态类,我只会写一些类似的东西:
var target = FastMethods.GetBytes(0,ms.Length);
所以,如果我没有完全迷失,它至少应该做同样的事情。
现在,当我说慢一点时,我的意思并不多,我说的是蜱虫。从1-3个刻度到3-4个刻度。
它通常在1-2,静态将在3左右,至少在我的短期测试中没有达到1。
与内联代码相比,方法调用总是会有一些开销,因为在调用方法时会对上下文进行更改。与内联代码相比,生成了更多的IL指令(推送参数、调用指令),但性能损失可以忽略不计。
所以,如果我没有完全迷失,它至少应该做同样的事情。
就获取值而言,它也在做同样的事情,但在幕后还有很多事情要做。因为调用该方法有自己的开销。
但它从来都不是很多,而且对于组织良好的代码来说,这是一个非常小的妥协。