使用静态类,比立即使用它慢?

时间:2013-08-17 06:03:41

标签: c# performance class

我注意到如果我使用静态类中的代码,它比我直接在我想要的地方运行它的速度慢。

例如:

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。

2 个答案:

答案 0 :(得分:2)

与内联代码相比,方法调用总是有轻微的开销,因为在调用方法时会发生上下文更改。生成更多IL指令(推送参数,调用指令)而不是内联代码,但性能损失可以忽略不计。

答案 1 :(得分:2)

  

所以,如果我没有完全迷失,至少应该做同样的事情。

就获取价值而言,它正在做同样的事情,但在幕后还有很多事情要发生。调用方法有自己的开销。

但它绝不是很多,而且你必须为组织良好的代码做出一个非常小的妥协。