精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

C#擴展方法性能測試對比

開發(fā) 后端
本文將C#擴展方法性能測試的結(jié)果分享給大家,供大家一起探討。

最近寫了幾篇《c#擴展方法奇思妙用》的文章,一直只是討論如何擴展、如何使用的問題,幾乎沒有涉及效率方面。

而大家的回復(fù)好多都在問效率如何、性能怎樣,也引起了我對效率的關(guān)注,今天將初步測試的結(jié)果發(fā)出來,大家一起探討一下。

以前沒太寫過性能測試的代碼,上網(wǎng)找了一下,說可以用Stopwatch進(jìn)行計時,比較準(zhǔn)確。

Stopwatch使用比較簡單,幾個方法從名字上就知道用用途:Reset(計時清零)、Start(開始計時)、Stop(停止計時),屬性ElapsedMilliseconds就是執(zhí)行操作所用的毫秒數(shù)。

為了簡化測試,讓更多人看明白,我們這是對IsNullOrEmpty擴展進(jìn)行測試,它只是簡單調(diào)用string.IsNullOrEmpty靜態(tài)方法。

但為了讓我們的測試更有趣一些,我們再加上兩個相同功能的方法,一個是IsNullOrEmpty的手工實現(xiàn)版,稱為手工方法,另外一個用lambda表達(dá)式寫的。

C#擴展方法性能測試方法三則

一共是如下三個方法與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<  stringbool> IsNullOrEmpty3 = s => string.IsNullOrEmpty(s); 

我們在函數(shù)名后面添加上一個數(shù)字,將它們區(qū)分開,以避免相互混淆。

為了測試公正,盡量消除測試中的誤差,我們采用一個數(shù)組存放要測試的字符串。

這個數(shù)組中存放三種字符串,非Empty非Null、Empty、Null。隨機存入,數(shù)量大致相同。生成算法如下:

  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 <   count; i++)  
  8.     {  
  9.         r = random.Next(3);  
  10.        if (r == 0) result[i] = i.ToString();  
  11.        else if (r == 1) result[i] = string.Empty;  
  12.        else result[i] = null;  
  13.    }  
  14.    return result;  

我們讓這四個算法(前面三個算法+原來的靜態(tài)算法)依次對數(shù)組中的每一項進(jìn)行判斷。

有一點要特別注意,對集合遍歷也要耗時,我們要排除這段時間。

下面給出測試算法,寫的不好,別見笑:

  1. public static void Test()  
  2.  {  
  3.      int count = 10000000;                                 //7個零  
  4.      string[] ss = GetTestStringArray(count);  //測試字符串Array  
  5.      bool b;  
  6.      string str;  
  7.    
  8.      long t = 0;    //基本循環(huán)時間  
  9.      long t0 = 0;    //原方法時間  
  10.     long t1 = 0;    //擴展方法時間  
  11.     long t2 = 0;    //手工方法時間  
  12.     long t3 = 0;    //lambda時間  
  13.  
  14.     Stopwatch watch = new Stopwatch();  
  15.     for (int i = 0; i <   10; i++)    //循環(huán)測試10次  
  16.     {  
  17.         watch.Reset(); watch.Start();  
  18.         foreach (string s in ss) str = s;  
  19.         watch.Stop();  
  20.         Console.Write("基本循環(huán):" + watch.ElapsedMilliseconds + "ms\t\t\t\t");  
  21.         t += watch.ElapsedMilliseconds;  
  22.  
  23.         watch.Reset(); watch.Start();  
  24.         foreach (string s in ss) { str = s; b = string.IsNullOrEmpty(str); }  
  25.         watch.Stop();  
  26.         Console.Write("原方法:" + watch.ElapsedMilliseconds + "ms\t\t");  
  27.         t0 += watch.ElapsedMilliseconds;  
  28.  
  29.         watch.Reset(); watch.Start();  
  30.         foreach (string s in ss) { str = s; b = str.IsNullOrEmpty1(); }  
  31.         watch.Stop();  
  32.         Console.Write("擴展方法:" + watch.ElapsedMilliseconds + "ms\t\t");  
  33.         t1 += watch.ElapsedMilliseconds;  
  34.  
  35.         watch.Reset(); watch.Start();  
  36.         foreach (string s in ss) { str = s; b = IsNullOrEmpty2(str); }  
  37.         watch.Stop();  
  38.         Console.Write("手工方法:" + watch.ElapsedMilliseconds + "ms\t\t");  
  39.         t2 += watch.ElapsedMilliseconds;  
  40.  
  41.         watch.Reset(); watch.Start();  
  42.         foreach (string s in ss) { str = s; b = IsNullOrEmpty3(str); }  
  43.         watch.Stop();  
  44.         Console.Write("lambda方法:" + watch.ElapsedMilliseconds + "ms\t\t");  
  45.         t3 += watch.ElapsedMilliseconds;  
  46.  
  47.         Console.WriteLine();  
  48.     }  
  49.  
  50.     Console.WriteLine();  
  51.  
  52.     Console.WriteLine(string.Format("擴展方法\t / 原方法\t = {0:f2}", (t1 - t) * 1.0 / (t0 - t)));  
  53.     Console.WriteLine(string.Format("手工方法\t / 原方法\t = {0:f2}", (t2 - t) * 1.0 / (t0 - t)));  
  54.     Console.WriteLine(string.Format("lambda方法\t / 原方法\t = {0:f2}", (t3 - t) * 1.0 / (t0 - t)));  

想重構(gòu)一下,考慮了幾種辦法,不太好,怕重構(gòu)后大家看起來更費力。

Test中的4個小段代碼很相似,分別用來測量4個算法的用時。

1     foreach (string s in ss) str = s;

上面這句代碼是基本循環(huán),后面三組代碼都在它基礎(chǔ)上加入相應(yīng)操作。

Test()不復(fù)雜,就是太啰嗦,大家都看得明白。

先在Debug模式下執(zhí)行測試:

后面三個方法效率也太低了吧!!且一放,再看Release模式:

比前面效率提高了一些。***是把Release模式下生成的程序,放在命令行中執(zhí)行:

說明一:項目的輸出類型必需是“控制臺應(yīng)用程序”才能在控制臺中輸出。

說明二:控制臺的寬度比較小,我刪除了Test()中輸出中的幾個制表符等,才讓它輸入不換行。

說明三:本處執(zhí)行的是Release模式生成的程序,而不是Debug模式生成的程序。

Debug和Release測試是在VS2008宿主中進(jìn)行的,***控制臺測試才是真正的實際運行環(huán)境,我們測試結(jié)果以控制臺測試結(jié)果為準(zhǔn)。

之所以將前面兩個貼出來,是告訴大家在vs中調(diào)試測試的結(jié)果是相當(dāng)不準(zhǔn)確的。

C#擴展方法性能測試結(jié)果

我們來分析下測試的結(jié)果吧:

1.擴展方法的效率是相當(dāng)高的,與原方法只有百分之幾(多運行幾次,可能是1、3、4甚至0,還有一次是-2,即比值為0.98)的性能損失。

2.手工方法效率***,低得出乎大多數(shù)人的意料。

3.lambda會帶來“可觀”的性能損失。

如果考慮性能:可以使用擴展方法,但擴展方法內(nèi)部不要使用lambda表達(dá)式,其內(nèi)部盡量使用常規(guī)代碼。

(其實擴展方法內(nèi)部代碼簡潔與否無所謂,畢竟擴展方法是一種封裝,可以將內(nèi)部復(fù)雜的操作隱藏起來并以一個簡單的擴展方法提供給調(diào)用者)

如果考慮性能:少用lambda,多用原生方法。

感覺:這次測試的結(jié)果令我倍感意外,確實沒想到c#擴展方法的效率如此之高(看來我的擴展想法有市場了)!

期望:本人是“粗人”,很不細(xì)心,大家如果發(fā)現(xiàn)上面測試中有錯誤,請馬上告知我,謝謝!

打算:對一個c#擴展方法的測試說服力不夠,以后會再做一些相關(guān)測試工作。

感慨:效率的高低不是眼睛看看、腦子想想能斷定的,而必需采用科學(xué)的測試方法才可以給出結(jié)論。

(討論,如果本文只給出在debug及release下的測試結(jié)果,會是怎樣的呢?)

以上就介紹了C#擴展方法性能測試的一些結(jié)果。

【編輯推薦】

  1. C# winForm自定義鼠標(biāo)樣式的兩種方法
  2. C#自定義消息框的設(shè)置圖解
  3. 掌握C#自定義泛型類:從初始化說起
  4. C#存儲過程的循序漸進(jìn)
  5. 存儲過程的優(yōu)勢及其調(diào)用方法介紹
責(zé)任編輯:book05 來源: cnblogs
相關(guān)推薦

2009-08-10 17:36:17

C#擴展方法

2009-08-27 18:04:01

c#擴展方法string

2009-09-01 11:04:59

C#調(diào)用擴展方法

2009-08-31 14:45:10

C#擴展方法

2009-08-26 15:53:48

C#擴展方法

2009-08-27 09:27:49

C#擴展方法

2009-08-27 16:24:48

擴展方法C# 3.0新特性

2009-08-28 17:18:55

foreach循環(huán)

2009-08-13 17:06:37

C#擴展方法Enumerable.

2009-09-17 15:39:56

C#數(shù)組初始化

2009-04-03 13:20:05

C#擴展方法調(diào)用

2024-11-29 07:32:38

2009-09-01 11:19:47

C# 3.0擴展重載抉

2009-09-17 18:56:22

CLR Via C#

2009-08-25 15:04:45

C#測試假設(shè)條件

2024-12-23 07:38:20

2009-08-26 09:50:08

C# GreetPeo

2009-08-26 17:16:22

C# CheckSta

2009-08-17 17:40:53

C# GetAllCu

2009-08-28 14:25:57

C# byte數(shù)組
點贊
收藏

51CTO技術(shù)棧公眾號

91黄色小视频| 黄色在线免费观看| 国产激情久久久久久熟女老人av| 亚洲综合网狠久久| 日本欧美一区二区三区乱码| 精品国产一区二区三区久久久蜜月 | 国产精品1区二区.| 国产丝袜精品第一页| 今天免费高清在线观看国语| 中文在线免费观看| 影视先锋久久| 午夜视频在线观看一区二区| 147欧美人体大胆444| 欧美aaa级片| 美女100%一区| 91蜜桃在线免费视频| 欧美精品videofree1080p| www.五月天色| 老司机在线视频二区| 宅男在线一区| 欧美一二区视频| 中文字幕一区二区三区四区五区| 蜜臀尤物一区二区三区直播| 少妇精品久久久一区二区三区| 韩曰欧美视频免费观看| 久久婷婷人人澡人人喊人人爽| 亚洲码无人客一区二区三区| 中文字幕高清在线播放| 91免费在线播放| 91在线视频成人| 中文字幕在线有码| 9999精品| 一区二区三区蜜桃| 成人91免费视频| 精品一区免费观看| 成人性生交大片免费看中文视频| 一级中文字幕一区二区| 亚洲aⅴ天堂av在线电影软件| 国产精品熟女视频| 国产一区二区区别| 在线观看视频一区二区| 一本久道久久综合| 国产wwwwwww| 蜜桃视频一区二区三区| 久久精品精品电影网| 日本成人在线免费| 麻豆国产在线| 99久久精品免费观看| 97超碰色婷婷| 国产精品成人在线视频| 996久久国产精品线观看| 欧美制服丝袜第一页| 99蜜桃臀久久久欧美精品网站| www在线播放| 国产精品123| 91精品一区二区| 亚洲最大成人在线视频| 国产精品vip| 日韩激情在线视频| 日韩va在线观看| rebdb初裸写真在线观看| 国产免费久久精品| 97免费高清电视剧观看| 成人av无码一区二区三区| 精品久久久久久久久久久久久久久久久久 | 久久人妻少妇嫩草av蜜桃| h片在线观看视频免费| 久久精品亚洲精品国产欧美| 亚洲一区二区三区视频播放| 久久久久女人精品毛片九一 | 91干在线观看| 精品成人av一区二区在线播放| 成人羞羞视频在线看网址| 欧美一级二级在线观看| 特黄特色免费视频| 国内露脸中年夫妇交换精品| 欧美综合久久久| 91网址在线播放| av资源中文在线天堂| 精品美女永久免费视频| 秋霞在线一区二区| 九九热视频在线观看| 国产成人啪免费观看软件| 超碰97网站| 欧美一区二不卡视频| 免费久久99精品国产| 国产欧美一区二区三区四区| 国产精品999在线观看| 久久精品一区| 欧美激情一级欧美精品| 久久青青草视频| 欧美aaa在线| 91精品国自产在线观看| 手机福利在线| www.亚洲精品| 91视频99| 国产毛片在线看| 91蜜桃在线观看| 正在播放一区| 午夜激情在线播放| 欧美日韩国产天堂| 天天干在线影院| 国产老头和老头xxxx×| 日本片在线看| 亚洲天堂精品视频| 午夜欧美一区二区三区免费观看| 欧美成人高清在线| 国产精品毛片无遮挡高清| 蜜桃久久影院| 黄色成人在线| 日韩欧美国产骚| 久久综合九色综合88i| 在线中文字幕-区二区三区四区| 国产精品久久久久天堂| 日本大片免费看| 色呦呦在线视频| 色综合一个色综合| 国产超级av在线| 人在线成免费视频| 91精品国产乱码久久蜜臀| 天堂中文av在线| 亚洲a级精品| 欧美日本亚洲视频| 91av视频在线观看| 日韩精品一区二区不卡| 欧美国产高清| 欧美成人免费全部| 欧美日韩激情在线观看| 国产在线日韩| 成人h视频在线观看播放| 国产视频在线观看免费| 国产成人av福利| 国产一区二区三区av在线| 香蕉视频网站在线| 国产夜色精品一区二区av| 日韩欧美精品一区二区| 巨大荫蒂视频欧美大片| 色悠悠亚洲一区二区| 中文字幕天堂av| 色综合综合色| 555www成人网| 亚洲无码久久久久久久| 久久久久成人黄色影片| a在线视频观看| 精品视频自拍| 在线观看国产精品日韩av| 成人午夜免费影院| 日韩国产欧美三级| 亚洲在线视频观看| 国产视频在线播放| 91精品国产色综合久久ai换脸| 国产日产在线观看| 午夜国产一区| 91手机在线播放| 日韩伦理电影网站| 精品免费国产二区三区| avhd101老司机| 日本午夜一本久久久综合| 日本一区二区三区免费看| 老司机福利在线视频| 欧美久久久久久久久久| 逼特逼视频在线观看| 欧美在线三级| 国产精品久久亚洲7777| 国产乱子夫妻xx黑人xyx真爽 | 欧美日韩中文字幕在线| 91精品国产自产| 成人在线免费观看网站| 国产精品老牛影院在线观看 | 亚洲第一精品夜夜躁人人爽| 91中文字幕永久在线| 98精品久久久久久久| 久久久久久久久国产| 老司机午夜福利视频| 亚洲欧美在线aaa| 国产伦精品一区二区三区四区视频_| 欧美日韩国产网站| 亚洲第一区第一页| 久久99国产综合精品免费| 久久久久久久久久久电影| 亚洲人成无码www久久久| 日韩精品一区二区三区中文在线 | 成人精品在线观看| 中文在线免费| 亚洲欧洲黄色网| 日韩人妻无码一区二区三区99| 看国产成人h片视频| 欧美日韩在线观看一区二区三区| 波多野结衣中文字幕久久| 91精品蜜臀在线一区尤物| 鲁丝一区二区三区| 国产精品婷婷| 国产成人看片| 在线免费观看污| 日韩禁在线播放| 国产又色又爽又黄又免费| 国产色一区二区| 女人高潮一级片| 野花国产精品入口| 成人av片网址| 三上悠亚激情av一区二区三区 | 精品国产精品自拍| 日韩免费成人av| 成人精品鲁一区一区二区| 日韩人妻一区二区三区蜜桃视频| 大奶在线精品| 国产情人节一区| 密臀av在线播放| 久久九九全国免费精品观看| 午夜小视频在线播放| 91精品久久久久久久久99蜜臂| www..com国产| 亚洲精品五月天| 三上悠亚 电影| 日韩中文字幕av电影| 黄色小视频大全| 成人6969www免费视频| 韩国一区二区三区美女美女秀| a级片在线免费| 日韩视频免费观看| 99国产在线播放| 欧美最猛黑人xxxxx猛交| 国产精品6666| 伊人性伊人情综合网| 伊人久久久久久久久| 久久福利视频一区二区| 欧美三级午夜理伦三级老人| 精品国产亚洲一区二区三区在线| 久久的精品视频| 亚洲va久久久噜噜噜无码久久| 一个色在线综合| 五月婷婷综合激情网| 国产馆精品极品| 亚洲va在线va天堂va偷拍| 欧美 日韩 国产 一区| 亚洲精品成人a8198a| 成人免费91| 久久久久在线观看| 欧美捆绑视频| 欧美电影在线免费观看| 中文字幕在线播| 欧美日韩中文字幕| 全部毛片永久免费看| 天天综合天天综合色| 国产性生活网站| 久久一二三国产| 色免费在线视频| 亚洲香蕉网站| 国产一区二区高清不卡| av日韩精品| 国产精品一区二区免费| www.爱久久| 国精产品一区二区| 日韩av不卡一区| 国产噜噜噜噜噜久久久久久久久| 久热国产在线| 欧美精品日韩三级| 伊人在我在线看导航| 欧美激情网站在线观看| 成人免费观看在线观看| 97人人爽人人喊人人模波多| 日本在线免费播放| 日韩精品在线免费观看| 深夜福利在线观看直播| 欧美日韩国产经典色站一区二区三区| 精品黑人一区二区三区| 欧美曰成人黄网| 国产一级特黄毛片| 五月激情综合色| 欧美亚洲另类小说| 制服丝袜日韩国产| 超碰福利在线观看| 亚洲国产精品成人av| 免费黄网站在线观看| 中文字幕亚洲自拍| 亚欧洲精品视频| 亚洲欧美制服另类日韩| 午夜免费福利在线观看| 久久99久久久久久久噜噜| 日韩脚交footjobhd| 国产精品美女免费看| 成人短视频软件网站大全app| 国产99视频精品免费视频36| 天天躁日日躁狠狠躁欧美| y111111国产精品久久婷婷| 久久99精品国产自在现线| 日本免费高清一区二区| 欧美喷水视频| 偷拍盗摄高潮叫床对白清晰| 国产一在线精品一区在线观看| 日韩网址在线观看| 国产乱子伦视频一区二区三区 | 国产91露脸合集magnet| 国产成人无码精品久久二区三| 国产精品欧美一区二区三区| 久久精品国产亚洲AV无码麻豆| 91黄色在线观看| 老司机午夜福利视频| 日韩在线视频观看| 国产51人人成人人人人爽色哟哟| 久久亚洲精品一区| 成人欧美magnet| 99理论电影网| 久久一本综合| 国产精品第12页| 国产成人av影院| 亚洲精品电影院| 一本色道久久综合精品竹菊| www.国产黄色| www.日韩系列| 欧美free嫩15| 国产精品女视频| 欧美日韩一区二区三区不卡视频| 最新不卡av| 日韩主播视频在线| 国产福利在线观看视频| 91香蕉视频mp4| 午夜69成人做爰视频| 亚洲一级二级三级在线免费观看| 九九在线观看视频| 欧美调教femdomvk| 少妇激情av一区二区| 久久久久久久久国产| 激情不卡一区二区三区视频在线| 日本亚洲欧洲精品| 香蕉久久久久久久av网站| 亚洲爆乳无码专区| 成人禁用看黄a在线| 天天看片中文字幕| 欧美精品乱码久久久久久按摩| 国产高清美女一级毛片久久| 91国产美女在线观看| 91成人精品在线| 欧美日韩午夜爽爽| 精品一区二区三区免费视频| 天天干天天操天天拍| 欧美中文字幕不卡| 国产黄色免费在线观看| 日本精品久久中文字幕佐佐木| 国产成人精品一区二区三区视频 | www.丝袜精品| 无码熟妇人妻av在线电影| 亚洲狼人精品一区二区三区| 男人揉女人奶房视频60分| 成人性生交大合| 国产美女免费网站| 色狠狠av一区二区三区| 国产一区二区三区福利| 国产成人精品免费久久久久 | 日本天码aⅴ片在线电影网站| 91网站免费观看| 欧美激情综合| 日本性生活一级片| 岛国精品视频在线播放| 日本高清中文字幕二区在线| 国产97人人超碰caoprom| 精品国产一级毛片| 日本精品久久久久久久久久| 成人黄色在线视频| 天堂网av手机版| 亚洲欧美中文另类| 久久精品国产福利| 久久riav| 日韩激情一二三区| 精品少妇一区二区三区密爱| 3d成人h动漫网站入口| 日本h片在线观看| 国产精品福利在线观看| 懂色av一区二区| 国产又黄又大又粗视频| 国产情人综合久久777777| 中文字幕在线观看高清| 欧美成人午夜视频| 欧美色图五月天| 一区二区在线播放视频| 1区2区3区欧美| 亚洲老妇色熟女老太| 青青草99啪国产免费| 嗯用力啊快一点好舒服小柔久久| 日韩中文字幕在线免费| 国产一区二区三区国产| 久久久久久成人网| 日韩欧美激情在线| 麻豆网站在线观看| 成人综合电影| 丝袜脚交一区二区| 免费的av网站| 欧美视频日韩视频在线观看| 深夜福利视频网站| 欧美人成在线视频| 亚洲人成亚洲精品| 九九九久久久久久久| ●精品国产综合乱码久久久久| 免费观看的毛片| 国产精品主播视频| 99亚洲视频| 久久国产精品国语对白| 欧美高清性hdvideosex| 狠狠操一区二区三区| 亚洲小说欧美另类激情|