第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

方法C#中的const值實例化性能

方法C#中的const值實例化性能

C#
翻閱古今 2021-04-29 13:45:48
在C#中的方法內(nèi)部使用常量是否正常?我的意思是,使用常量作為類屬性比使用常量作為方法內(nèi)部的變量有什么好處嗎?如果我寫class C {   void f() {     const int i = 0;   }}會慢嗎class C {  const int i = 0;  void f() {}}?在第一種情況下,i每次調(diào)用時都會實例化變量f()嗎?還是在編譯期間僅實例化一次?
查看完整描述

1 回答

?
SMILET

TA貢獻1796條經(jīng)驗 獲得超4個贊

在第一種情況下,我每次調(diào)用f()都會實例化變量嗎?還是在編譯期間僅實例化一次?


最簡單的方法是嘗試一下。例如,編譯以下代碼:


using System;


class Test

{

    const int ClassConst = 10;


    static void PrintLocalConst()

    {

        const int LocalConst = 10;

        Console.WriteLine(LocalConst);

        Console.WriteLine(LocalConst);

    }


    static void PrintClassConst()

    {

        Console.WriteLine(ClassConst);

        Console.WriteLine(ClassConst);

    }

}

兩種方法都編譯為相同的IL:


.method private hidebysig static void  PrintLocalConst() cil managed

{

  // Code size       18 (0x12)

  .maxstack  8

  IL_0000:  nop

  IL_0001:  ldc.i4.s   10

  IL_0003:  call       void [mscorlib]System.Console::WriteLine(int32)

  IL_0008:  nop

  IL_0009:  ldc.i4.s   10

  IL_000b:  call       void [mscorlib]System.Console::WriteLine(int32)

  IL_0010:  nop

  IL_0011:  ret

} // end of method Test::PrintLocalConst

堆棧上沒有局部常數(shù)的值。取而代之的是,每次使用時,常數(shù)值都直接包含在IL中-因此會ldc.i4.s 10被使用兩次。


就此而言,局部const比類const的效率非常非常非常高,因為類const仍在IL中表示。本地const有效地被編譯器完全刪除了。但是,IL表示形式中的常量的幾個字節(jié)幾乎不可能是有效的。(它不是按對象或方法調(diào)用分配的。)


查看完整回答
反對 回復(fù) 2021-05-08
  • 1 回答
  • 0 關(guān)注
  • 271 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號