C 例項化物件的三種方式及效能對比

2022-04-28 19:03:09 字數 2366 閱讀 1760

做專案過程中有個需求要例項化兩萬個物件並新增到list中,這個過程大概需要1min才能載入完(傳參較多),於是開啟了**優化之旅,再此記錄。

首先想到的是可能例項化比較耗時,於是開始對每種例項化方式進行測試,過程如下

1、用 new 關鍵字例項化乙個類

2、用 activator 例項化乙個類

3、用 assembly 例項化乙個類

測試環境:

vs2019 .net framework 4.7

intel core i7-10510u cpu

首先定義乙個類person

public class person 

public person(string name)

public string name

}

我們先在無參的建構函式中例項化,每種方式進行十次,每次例項化十萬次,**如下

static void main(string args)

", i.tostring().padleft(5));

console.write("\n");

console.write("instancebynew".padright(20));

for (int i = 1; i <= 10; i++)

console.write("\n");

console.write("instancebyactivator".padright(20));

for (int i = 1; i <= 10; i++)

watch.stop();

console.write(watch.elapsedmilliseconds.tostring().padleft(5));

}console.write("\n");

console.write("instancebyassembly".padright(20));

for (int i = 1; i <= 10; i++)

watch.stop();

console.write(watch.elapsedmilliseconds.tostring().padleft(5));

}console.write("\n");

console.readkey();

}

執行結果如下:

然後來看下有參建構函式中例項化的**和結果

static void main(string args)

", i.tostring().padleft(5));

console.write("\n");

console.write("instancebynew".padright(20));

for (int i = 1; i <= 10; i++)

console.write("\n");

console.write("instancebyactivator".padright(20));

for (int i = 1; i <= 10; i++)

);person = obj as person;

}watch.stop();

console.write(watch.elapsedmilliseconds.tostring().padleft(5));

}console.write("\n");

console.write("instancebyassembly".padright(20));

for (int i = 1; i <= 10; i++)

watch.stop();

console.write(watch.elapsedmilliseconds.tostring().padleft(5));

}console.write("\n");

console.readkey();

}

執行結果如下:

從上面的執行結果可以看出這三種方式的效能排序為

new > activator > assembly

但使用哪種方法還要視情況而定

以上可以看出new效能最高,而我就是使用的new,問題還沒解決,把問題指向判斷list是否存在某元素上,於是開始測試list中的contains, exists, any,where。詳情.

詳解C 例項化物件的三種方式及效能對比

做專案過程中有個需求要例項化兩萬個物件並新增到list 中,這個過程大概需要1min才能載入完 傳參較多 於是開啟了 優化之旅,再此記錄。首先想到的是可能例項化比較耗時,於是開始對每種例項化方式進行測試,過程如下 1 用 new 關鍵字例項化乙個類 2 用 activator 例項化乙個類 3 用 ...

C 的三種例項化物件方式

2019 05 04 19 15 43 d89538239 閱讀數 385 class cemployee cemployee int id cemployee void outputname 這種建立方式和第一種一樣,在程序虛擬位址空間中的棧中分配記憶體,它的分配和釋放由系統決定,函式內區域性變數...

Spring bean例項化三種方式

類檔案 public class examplebean bean examplebean class com.woniu.spring.test.examplebean 測試類 public void springbeanstest 靜態工廠類 public class examplebeanst...