国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

for語句嵌套循壞性能的剖析

2019-11-17 02:35:22
字體:
來源:轉載
供稿:網友

for語句嵌套循壞性能的剖析

日常工作中,處理數據難免會遇到遍歷,for循環可能是我們用的比較多的了。本節就來探討下for語句嵌套循環的性能,猜想下面兩個語句的性能。

語句1

for ( i= 0;  i < 1000000;  i++){      for (j =0; j < 100; j++)          {              exPRession;          }}    

語句2

for ( i= 0;  i < 100;  i++){      for (j =0; j < 1000000; j++)          {              expression;          }}    

乍一看,感覺兩個嵌套循環執行的次數都是一樣的,那么他們的時間復雜度是一樣的嗎?讓我們來分析下,語句1外層循環執行了1000000次,內層循環執行了1000000*100次,而語句2外層循環執行了100次,內層循環也執行了1000000*100次。那么,既然內層執行的次數都一樣,外層是不是執行的越少越好呢?讓我們寫代碼認證下。

驗證代碼

        static void Main(string[] args)        {            Stopwatch sw = new Stopwatch();            sw.Start();            for (int i = 0; i < 1000000; i++)            {                for (int j = 0; j < 100; j++)                {                    // expression;                }            }            sw.Stop();            Console.WriteLine(sw.ElapsedMilliseconds);            sw.Reset();            sw.Start();            for (int i = 0; i < 100; i++)            {                for (int j = 0; j < 1000000; j++)                {                    // expression;                }            }            sw.Stop();            Console.WriteLine(sw.ElapsedMilliseconds);        }

驗證截圖

得出結論,對于for語句的嵌套循環,總循環次數相等,外層循環越小越好。個人拙見,工作中具體情況具體對待...

補充總結(2月3日)

上文的描述給大家展現的都是現象,并沒有告訴大家事物的本質。(@Sunday*)Sunday*告訴我說“是因為減少了對int j=0的賦值操作,這些會有一定的性能上的消耗,但這種優化不是本質上的性能提升!”,于是引發了我更深層次的思考。其實,控制外層循環次數越小,我們可以發現i自增的次數少了,i<100的判斷次數少了,以及內層循環中的int j=0賦值的次數也少了,自然而然性能就得到了提升。

Sunday*說的很對:使用for應盡量避免里面創建對象,減少循環次數,這樣才能達到優化;而我得出的結論:對于for語句的嵌套循環,總循環次數相等,外層循環越小越好。兩者都是正確的。代碼是死的,人是活的,人得靈活駕馭代碼,具體情況具體對待。

最后,我不否認這種優化對性能提升不了多少,但是,假如我遇到了本文所提的情況,我必須得本能得寫出最優代碼,這也是我研究的目的所在。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 闽清县| 绥芬河市| 建始县| 宣化县| 铜鼓县| 稻城县| 全州县| 虎林市| 阳朔县| 开鲁县| 淳安县| 诸城市| 苗栗县| 偏关县| 灵寿县| 隆德县| 峨眉山市| 阿尔山市| 通道| 丹江口市| 深水埗区| 清水河县| 盘锦市| 南平市| 平武县| 彩票| 阳曲县| 峡江县| 南川市| 汉阴县| 伊宁县| 乌兰县| 疏附县| 永川市| 公主岭市| 文昌市| 昂仁县| 中山市| 华池县| 股票| 石景山区|