const vs readonly

2016年11月26日 星期六

 

1.const的常數是在編譯時期將所有使用到的地方替換成實際的數值(效能較好)

 

2.readonly是在實際執行期間才會去查找(靈活性高),可當做執行階段當數使用

例:public static readonly uint timeStamp = (uint)DateTime.Now.Ticks;

 

3.const的常數不能同時是static

 

4.readonly不能在method中使用

 

5.readonly可以在建構式裡給初始值

 

 

2016-11-26 下午 10-35-12

 

利用ILSpy反編譯工具查看編譯出來的dll

2016-11-26 下午 10-35-50

 

 

 

public class ReadOnlyTest
  {
     class SampleClass
     {
        public int x;
        // Initialize a readonly field
        public readonly int y = 25;
        public readonly int z;

        public SampleClass()
        {
           // Initialize a readonly instance field
           z = 24;
        }

        public SampleClass(int p1, int p2, int p3)
        {
           x = p1;
           y = p2;
           z = p3;
        }
     }

     static void Main()
     {
        SampleClass p1 = new SampleClass(11, 21, 32);   // OK
        Console.WriteLine("p1: x={0}, y={1}, z={2}", p1.x, p1.y, p1.z);
        SampleClass p2 = new SampleClass();
        p2.x = 55;   // OK
	//p2.y = 10; //因為不是在建構函數給值所以會出錯
	//錯誤訊息:無法指定唯讀欄位(除非在建構函數或變數初始設定式)
        Console.WriteLine("p2: x={0}, y={1}, z={2}", p2.x, p2.y, p2.z);
     }
  }
  /*
   Output:
      p1: x=11, y=21, z=32
      p2: x=55, y=25, z=24
  */

 

 

參考來源:

https://dotblogs.com.tw/yc421206/archive/2011/06/06/27232.aspx

http://slmtsite.blogspot.tw/2016/10/c-36-constant.html

https://msdn.microsoft.com/zh-tw/library/e6w8fe1b.aspx

https://msdn.microsoft.com/zh-tw/library/acdd6hb7.aspx

Read more...

String Pool

2016年11月22日 星期二

 

string pool簡單說就是一個Hash Table ,其中Key值是字串內容,Value是物件實體位置。

內容值會在程式編譯時期做初始設定,將程式碼中用到的用串加入,所以不同字串變數存放的靜態字串,

若是一樣的字串,字串會在編輯時期加入String Pool,透過String Pool的協助兩個變數會指到相同的物件實體。

 

一般的字串比對底層是以Byte為基礎的方式去比對,當比對的字串很長時,整個處理效能就跟著低落,若是可以善用

string pool,我們只需比對兩者是否指到相同的物件實體就可以了,可以獲得較佳的效能。

參考Larry大的文章,用ReferenceEquals效能是較好的。

 

2016-11-22 下午 11-29-52

執行結果

2016-11-22 下午 11-30-24

 

2016-11-22 下午 11-31-26

執行結果

2016-11-22 下午 11-32-18

2016-11-22 下午 11-34-13

執行結果

2016-11-22 下午 11-34-25

 

 

 

參考:https://dotblogs.com.tw/larrynung/archive/2011/06/30/30763.aspx

Read more...