做專案過程中有個需求要例項化兩萬個物件並新增到list中,這個過程大概需要1min才能載入完(傳參較多),於是開啟了**優化之旅,再此記錄。
首先想到的是可能例項化比較耗時,於是開始對每種例項化方式進行測試,過程如下
1、用 new 關鍵字例項化乙個類
2、用 activator 例項化乙個類
3、用 assembly 例項化乙個類
測試環境:首先定義乙個類personvs2019 .net framework 4.7
intel core i7-10510u cpu
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...