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

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

下載app免費領(lǐng)取會員

NULL

ad.jpg

二次開發(fā)教程:C# 反射性能

發(fā)布于:2019-07-24 16:46:41

網(wǎng)友投稿

更多

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


這里可以比較一下,構(gòu)造方法帶參數(shù)和不帶參數(shù)的區(qū)別。


先創(chuàng)建一個測試類,分為構(gòu)造函數(shù)帶參數(shù)和不帶參數(shù),兩種情況來測試


    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();

        }

    }




發(fā)現(xiàn)使用Assembly.CreateInstance是最慢的,使用new 是最快的


當構(gòu)造函數(shù)帶參數(shù)的時候,ConstructorInfo.Invoke是第二快的


當構(gòu)造函數(shù)不帶參數(shù)的時候Activator.CreateInstance是第二快的,


查看Assembly.CreateInstance的源碼,發(fā)現(xiàn)他在內(nèi)部是用Activator.CreateInstance創(chuàng)建的,但是多了一個尋找Type的過程,


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

本文版權(quán)歸腿腿教學網(wǎng)及原創(chuàng)作者所有,未經(jīng)授權(quán),謝絕轉(zhuǎn)載。

未標題-1.jpg

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

下一篇:關(guān)于revit中2D軸網(wǎng)與3D的區(qū)別

主站蜘蛛池模板: 亚洲美女色成人综合 | 黄址在线观看 | 国产精品青草久久 | 综合天天色| 高清 国产 日韩 欧美 | 亚洲美女aⅴ久久久91 | 成人欧美一区二区三区在线 | 国产成人精品视频 | 亚洲欧美国产精品 | 欧美日韩国产人成在线观看 | 国产日韩一区二区 | 国产精品久久久久久久毛片 | 欧美成人性毛片免费版 | 色老头网站久久网 | 亚洲欧洲日本精品 | 在线亚洲欧国产精品专区 | 中文字幕一区二区在线观看 | 夜夜爱夜夜操 | 欧美一区二区三区免费看 | 一级毛片私人影院老司机 | 国产欧美成人免费观看视频 | 欧美日韩另类在线观看视频 | 好大好爽国产美女h福利视频 | 成年人在线观看网址 | 国内精品视频在线 | 亚洲国产乱码在线精品 | 小明看片成人永久在线观看 | 亚洲综合久久成人69 | 国产高清色视频免费看的网址 | 国产精品国产精品国产三级普 | 亚州成人 | 一级特黄录像免费播放冫 | 黑人狂躁日本妞中文字幕 | 亚洲综合18p | 中文学幕专区 | 国产精品va在线观看无 | 国产小视频在线免费 | 成人做视频免费 | 日韩高清在线高清免费 | 日韩专区亚洲国产精品 | 一级一级一级一级毛片 |