堆堆栈中的运行时间

本文关键字:运行时间 堆栈 | 更新日期: 2023-09-27 18:25:04

我创建了一个代码来计算运行时间。

它起作用了。但我无法解释:Heap和Stack中的变量之间有什么区别?

我说的是"运行时间"。

我在堆中创建了3个变量:a、b、c。

堆栈中的3个变量:aa、bb、cc.

我的代码:

class Program
{
    private int a = 1;
    private int b = 2;
    private int c = 0;
    static void Main()
    {
        int aa = 1;
        int bb = 2;
        int cc = 0;
        var sw = new Stopwatch();
        var _sw = new Stopwatch();
        Program pro = new Program();
        for (int k = 0; k < 10; k++)
        {
            sw.Start();
            for (int i = 0; i < 500000000; i++)
            {
                pro.c += pro.a + pro.b;
            }
            sw.Stop();
            Console.WriteLine("Heap:");
            Console.WriteLine("TotalMiliseconds: {0}", sw.Elapsed.TotalMilliseconds.ToString());
            Console.WriteLine("__________________________________");
            sw.Reset();
            _sw.Start();
            for (int j = 0; j < 500000000; j++)
            {
                cc += aa + bb;
            }
            _sw.Stop();
            Console.WriteLine("Stack:");
            Console.WriteLine("TotalMiliseconds: {0}", _sw.Elapsed.TotalMilliseconds.ToString());
            Console.WriteLine("__________________________________");
            _sw.Reset();
        }
        Console.ReadKey();
    }

}

我的问题是:你能告诉我为什么Heap的运行时间总是比Stack快吗?

谢谢!

堆堆栈中的运行时间

据我所知,您并没有将堆栈访问与堆访问进行比较,因为这两组变量都是在堆栈上分配的,因为它们都是值类型。请参见此处:http://msdn.microsoft.com/en-us/library/4d43ts61(v=vs.90).aspx