91手机视频在线-91手机视频在线观看-91手机在线-91手机在线播放-91手机在线观看

完善主體資料,免費贈送VIP會員!
* 主體類型
* 企業名稱
* 信用代碼
* 所在行業
* 企業規模
* 所在職位
* 姓名
* 所在行業
* 學歷
* 工作性質
請先選擇行業
您還可以選擇以下福利:
行業福利,領完即止!

下載app免費領取會員

NULL

ad.jpg

二次開發教程:C# 反射性能

發布于:2019-07-24 16:46:41

網友投稿

更多

C# 創建對象可以直接用new,也可以用反射,下面測試一下反射創建的性能如何,


這里可以比較一下,構造方法帶參數和不帶參數的區別。


先創建一個測試類,分為構造函數帶參數和不帶參數,兩種情況來測試


    public class Test

    {

        public string Name { get; set; }

        public string Id { get; set; }

        public Test(string name, string id)

        {

            Name = name;

            Id = id;

        }

        //public Test()

        //{

        //    //Name = name;

        //    //Id = id;

        //}

    }


要測試的方法有


new 


Assembly.CreateInstance


Activator.CreateInstance


ConstructorInfo.Invoke


下面是測試代碼


    class Program

    {

        static void Main(string[] args)

        {

            int m = 1000000;

            int i = 0;



            string typeName = typeof(Test).FullName;

            Assembly ab = typeof(Test).Assembly;

            Type type = typeof(Test);

            ConstructorInfo cinfo = type.GetConstructors().First();



            object[] ps = new object[] { "name", "id" };



            Stopwatch stopWatch = new Stopwatch();

            Console.WriteLine("---------------------------------------------");

            Console.WriteLine("new");

            stopWatch.Start();

            Console.WriteLine(stopWatch.ElapsedMilliseconds);

            while(i<m)

            {

                Test t = new Test("name","id");

                i++;

            }

            Console.WriteLine(stopWatch.ElapsedMilliseconds);



            stopWatch.Stop();

            stopWatch.Reset();

            i = 0;

            Console.WriteLine("---------------------------------------------");

            Console.WriteLine("assembly");

            stopWatch.Start();

            Console.WriteLine(stopWatch.ElapsedMilliseconds);

            while (i < m)

            {

                Test t = ab.CreateInstance(typeName, false, BindingFlags.Public| BindingFlags.CreateInstance| BindingFlags.Instance, null, ps, null, null) as Test;

                //Test t = ab.CreateInstance(typeName) as Test;



                i++;

            }

            Console.WriteLine(stopWatch.ElapsedMilliseconds);



            stopWatch.Stop();

            stopWatch.Reset();

            i = 0;

            Console.WriteLine("---------------------------------------------");

            Console.WriteLine("Activetor");

            stopWatch.Start();

            Console.WriteLine(stopWatch.ElapsedMilliseconds);

            while (i < m)

            {

                Test t = Activator.CreateInstance(type,ps) as Test;

                i++;

            }

            Console.WriteLine(stopWatch.ElapsedMilliseconds);



            stopWatch.Stop();

            stopWatch.Reset();

            i = 0;

            Console.WriteLine("---------------------------------------------");

            Console.WriteLine("ConstructorInfo");

            stopWatch.Start();

            Console.WriteLine(stopWatch.ElapsedMilliseconds);

            while (i < m)

            {

                Test t = cinfo.Invoke(ps) as Test;

                //Test t = cinfo.Invoke(null) as Test;


                i++;

            }

            Console.WriteLine(stopWatch.ElapsedMilliseconds);



            Console.ReadLine();

        }

    }




發現使用Assembly.CreateInstance是最慢的,使用new 是最快的


當構造函數帶參數的時候,ConstructorInfo.Invoke是第二快的


當構造函數不帶參數的時候Activator.CreateInstance是第二快的,


查看Assembly.CreateInstance的源碼,發現他在內部是用Activator.CreateInstance創建的,但是多了一個尋找Type的過程,


似乎尋找Type是一件很耗時間的過程

本文版權歸腿腿教學網及原創作者所有,未經授權,謝絕轉載。

未標題-1.jpg

上一篇:二次開發教程:C# 初探UI Automation

下一篇:關于revit中2D軸網與3D的區別

主站蜘蛛池模板: 理论亚洲区美一区二区三区 | 国产精品一区二区丝瓜 | 免费日比视频 | 免费在线观看的黄色网址 | 亚洲黄色免费网址 | 中文字幕有码热在线视频 | 久久视频6免费观看视频精品 | 黄色免费网站在线观看 | aaaa级毛片欧美的 | 成人免费国产欧美日韩你懂的 | 国产高清视频在线观看不卡v | 国产精品天天影视久久综合网 | 91aaa免费观看在线观看资源 | 91久久精品国产亚洲 | 激情五月色综合色婷婷 | 老色影院| 国产成人成人一区二区 | 黄色大片免费在线观看 | 三级黄色小视频 | 成人免费体验区福利云点播 | 日本特黄aaaaaaa大片 | 99久久精品6在线播放 | 在线精品国产成人综合第一页 | 国内精品视频免费观看 | 国产精品激情福利视频 | 亚洲精选在线 | 成人午夜精品网站在线观看 | 日韩欧美精品中文字幕 | 国内精品福利 | 久久中文字幕不卡一二区 | 国产欧美二区 | 国产精品一区二区 尿失禁 国产精品一区二区三 | 亚洲欧美日韩在线2020 | 黄色特级一级片 | 国产精品区牛牛影院 | 久视频在线 | 91久久国产成人免费观看资源 | 涩色婷婷狠狠第四四房社区奇米 | 精品福利视频在线观看 | 久久日本精品99久久久久 | 久久精品视频在线播放 |