91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#中var、int、object性能比較

發布時間:2020-08-05 02:44:18 來源:網絡 閱讀:1862 作者:jayshsoft 欄目:編程語言

var關鍵字是.net3.5推出的關鍵字,主要是讓編譯器自動推斷并判斷變量類型,類似javascript中的var。

在使用一些性能優化軟件時,在代碼優化時,我發現不管定義什么類型的變量,變量的類型都統統換成var。難道var的性能比具體的類型和object都要高?

 

實踐出真知:

新建一個控制臺應用程序

 

class Program {
        static void Main(string[] args) {

            for (int i = 0; i < 10; i++)
            {
                Test();
                Console.WriteLine();
            }

          

            Console.Read();
        }


        public static void Test()
        {

            Stopwatch stw = new Stopwatch();
            Stopwatch stw1 = new Stopwatch();
            Stopwatch stw2 = new Stopwatch();


            /*Object性能測試 */
            stw2.Start();//開始時間

            List<int> intlist3 = new List<int>();
            for( int i = 0; i < 10000000; i++ ) {
                object index = i;//使用object轉入和轉出
                intlist3.Add((int)index);
            }
            stw2.Stop();
            Console.WriteLine("obj:{0}", stw2.Elapsed.Ticks);


            /*Var 性能測試 */


            List<int> intlist = new List<int>();
            stw1.Start();
            for( int i = 0; i < 10000000; i++ ) {
                var index = i;//使用var轉入和轉出
                intlist.Add(index);
            }
            stw1.Stop();

            Console.WriteLine("Var:{0}", stw1.Elapsed.Ticks);

            /*Int 性能測試 */


            List<int> intlist2 = new List<int>();
            stw.Start();//重新開始計時
            for( int i = 0; i < 10000000; i++ ) {
                int index = i;//使用int轉入和轉出
                intlist2.Add(index);
            }
            stw.Stop();

            Console.WriteLine("int:{0}", stw.Elapsed.Ticks);

            
        }

    }

 

 

測試結果:

C#中var、int、object性能比較

 

分析:

通過查閱文檔和書籍,var是隱式類型的局部變量 主要是方便書寫。在編譯期間,早已把var替換為實際推斷的類型(這里是int),而object多了一個裝箱拆箱的操作,

耗時自然是最長的。

以下是筆者對程序進行反編譯(C# 和 IL)后的截圖,我們可以清晰滴看到多余的代碼已經被優化,而所謂的var也不見了。在IL源碼中,明顯的看到object在循環的時候有裝箱拆箱的操作。

 

反編譯的C#代碼:(已經被優化)

C#中var、int、object性能比較

object測試的IL:

 

C#中var、int、object性能比較

 

var測試的IL:

C#中var、int、object性能比較

 

int測試的IL:

 

C#中var、int、object性能比較

 

 

總結:

 var性能 ≈ int > object

   object 類型牽涉裝箱拆箱的問題,自然是效率最慢的。

    但從測試結果來看,var類型的性能與int不相上下,但在測試結果中可以看到大部分var耗時會超過int。 實際上var在編譯的時候已經確定類型了


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

公主岭市| 太仓市| 灵台县| 东乌| 延庆县| 张家口市| 张家港市| 鄂尔多斯市| 巴里| 保山市| 宣城市| 克东县| 陆川县| 禄劝| 衡阳市| 台南县| 莱阳市| 双牌县| 温泉县| 苗栗县| 苏尼特右旗| 砚山县| 阿合奇县| 克拉玛依市| 商南县| 谢通门县| 都江堰市| 华容县| 洪泽县| 蛟河市| 乌审旗| 陈巴尔虎旗| 沽源县| 祁连县| 贺州市| 黄山市| 吉木萨尔县| 延川县| 莆田市| 大荔县| 大庆市|