/// <summary>
        /// 测试的运行方法
        /// </summary>
        public static void testRun()
        {
            Console.WriteLine("test start");
            int       totalCount = 100000000;
            Stopwatch sw         = new Stopwatch();

            sw.Start();
            for (int i = 0; i < totalCount; i++)
            {
                TestRef temp = new TestRef()
                {
                    Id = i, Name = "test"
                };
            }
            sw.Stop();
            Console.WriteLine($"引用类型实例化测试消耗:{sw.ElapsedMilliseconds}");
            sw.Reset();
            sw.Start();

            for (int i = 0; i < totalCount; i++)
            {
                TestVal temp = new TestVal()
                {
                    Id = i, Name = "test"
                };
            }
            sw.Stop();
            Console.WriteLine($"值类型实例化测试消耗:{sw.ElapsedMilliseconds}");
            Console.Read();
        }
    public static void Main()
    {
        //构造引用类型实例,其内存空间 在托管堆上 分配
        //tr的值是对TestRef类的实例的引用
        TestRef tr = new TestRef(1, 2);

        //构造值类型实例,其内存空间 在线程栈上 分配
        //tv的值就是TestVal结构的实例化本身
        TestVal tv = new TestVal(1, 2);

        //输出tr,tv的值
        System.Console.WriteLine("tr.a 的值是 " + tr.a);
        System.Console.WriteLine("tr.b 的值是 " + tr.b);
        System.Console.WriteLine("tv.a 的值是 " + tv.a);
        System.Console.WriteLine("tv.b 的值是 " + tv.b);

        //引用类型的赋值:将tr的值所指向的对象地址复制给tr2
        //此时tr和tr2 指向同一个对象,并不需要在托管堆上重新分配空间
        TestRef tr2 = tr;

        //值类型的赋值:在线程上重新分配空间,并将tv的值复制给tv2
        //此后tv和tv2相互独立
        TestVal tv2 = tv;

        //tr2所指对象的字段赋值,会改变tr
        tr2.a = 3;

        //tv2字段的修改不影响tv
        tv2.a = 3;

        System.Console.WriteLine("---------------------");
        System.Console.WriteLine("进行 tr2.a=3  tv2.a=3 后:");
        System.Console.WriteLine("tr.a 的值是 " + tr.a);
        System.Console.WriteLine("tr.b 的值是 " + tr.b);
        System.Console.WriteLine("tr2.a 的值是 " + tr2.a);
        System.Console.WriteLine("tr2.b 的值是 " + tr2.b);
        System.Console.WriteLine("tv.a 的值是 " + tv.a);
        System.Console.WriteLine("tv.b 的值是 " + tv.b);
        System.Console.WriteLine("tv2.a 的值是 " + tv2.a);
        System.Console.WriteLine("tv2.b 的值是 " + tv2.b);

        Console.ReadLine();
    }