C#意外的性能-函数调用

时间:2018-07-27 09:29:24

标签: c# performance

由于性能至关重要,因此我正在优化应用程序中的每一行代码。我正在测试所有假设,因为我所期望的并不是我实际看到的。

对我来说,一个奇怪的事情是函数调用的执行。以下是两种情况。在循环内迭代一个整数,并在循环内使用一个函数。我希望函数调用变慢,但是变快??

有人可以解释吗?我正在使用.NET 4.7.1

  • 不带功能:2808ms
  • 具有2295ms功能

更新

切换循环也会切换运行时-我不明白为什么,但是会原样接受。在不同的应用程序中运行两个不同的循环会得到相似的结果。我假设将来函数调用不会产生任何额外的开销

    public static int a = 0;

    public static void Increment()
    {
        a = a + 1;
    }

    static void Main(string[] args)
    {

        //There were suggestions that the first for loop always runs faster.  I have included a 'dummy' for loop here to warm up.  
        a = 0;
        for (int i = 0;i < 1000;i++)
        {
            a = a + 1;
        }



        //Normal increment
        Stopwatch sw = new Stopwatch();
        sw.Start();
        a = 0;
        for (int i = 0; i < 900000000;i++)
        {
            a = a + 1;
        }
        sw.Stop();
        Console.WriteLine(sw.ElapsedMilliseconds);


        //Increment with function
        Stopwatch sw2 = new Stopwatch();
        sw2.Start();
        a = 0;
        for (int i = 0; i < 900000000; i++)
        {
            Increment();
        }
        sw2.Stop();
        Console.WriteLine(sw2.ElapsedMilliseconds);

        Console.ReadLine();
    }

0 个答案:

没有答案