以前沒太寫過性能測試的代碼,上網找了一下,說可以用Stopwatch進行計時,比較准確。
Stopwatch使用比較簡單,幾個方法從名字上就知道用用途:Reset(計時清零)、Start(開始計時)、Stop(停止計時),屬性ElapsedMilliseconds就是執行操作所用的毫秒數。
為了簡化測試,讓更多人看明白,我們這是對IsNullOrEmpty擴展進行測試,它只是簡單調用string.IsNullOrEmpty靜態方法。
但為了讓我們的測試更有趣一些,我們再加上兩個相同功能的方法,一個是IsNullOrEmpty的手工實現版,稱為手工方法,另外一個用lambda表達式寫的。
一共是如下三個方法與string.IsNullOrEmpty(稱為“原方法”)比較:
1 //擴展方法
2 public static bool IsNullOrEmpty1(this string s)
3 {
4 return string.IsNullOrEmpty(s);
5 }
6 //手工方法
7 public static bool IsNullOrEmpty2(string s)
8 {
9 return s == null || s == string.Empty;
10 }
11 //lambda方法
12 public static Func<string, bool> IsNullOrEmpty3 = s => string.IsNullOrEmpty(s);
我們在函數名後面添加上一個數字,將它們區分開,以避免相互混淆。
為了測試公正,盡量消除測試中的誤差,我們采用一個數組存放要測試的字符串。
這個數組中存放三種字符串,非Empty非Null、Empty、Null。隨機存入,數量大致相同。生成算法如下:
1 private static string[] GetTestStringArray(int count)
2 {
3 string[] result = new string[count];
4 Random random = new Random();
5
6 int r = 0;
7 for (int i = 0; i